Search code examples
azureazure-sql-databaseazure-sdk

SQL DB Hyperscale ServiceObjectiveName/Cores


I am using the azure libraries for .net SDK and ran into a question.

What are the available options for the ServiceObjectiveName if the DatabaseEdition is Hyperscale?

When I create a Hyperscale DB, the ServiceObjectiveName default is Gen4 I believe. Is there a way to specify Gen5 and the amount of cores?

I found the list of ServiceObjectiveNames, but none of them seem to correlate to Hyperscale values. https://learn.microsoft.com/en-us/dotnet/api/microsoft.azure.management.sql.models.serviceobjectivename?view=azure-dotnet

  • Basic DS100 DS1000 DS1200 DS1500 DS200 DS2000 DS300 DS400 DS500 DS600 DW100 DW1000 DW10000c DW1000c DW1200 DW1500 DW15000c DW1500c DW200 DW2000 DW2000c DW2500c DW300 DW3000 DW30000c DW3000c DW400 DW500 DW5000c DW600 DW6000 DW6000c DW7500c ElasticPool Free P1 P11 P15 P2 P3 P4 P6 PRS1 PRS2 PRS4 PRS6 S0 S1 S12 S2 S3 S4 S6 S7 S9 System System0 System1 System2 System2L System3 System3L System4 System4L

Solution

  • According to my test, if we use Azure Management Libraries for .NET to create Hyperscale Gen5 database, we can use method ServiceObjectiveName.Parse("") to specify Gen5 and the amount of cores.

    for example

    If we use ServiceObjectiveName.Parse("HS_Gen5_2"), it means that thh databse is Hyperscale: Gen5, 2 vCores.

    The detailed stesps are as below:

    1. Create a service principal and assign role to the sp
    az ad sp create-for-rbac --name ServicePrincipalName --role contributor
    
    1. Code:
    var tenantId = "<your tenant id>";
                var clientId = "<your sp app id>";
                var clientSecret = <your sp password>;
    
                var SubscriptionId = "<your subscription id>";
    
                var credentials = SdkContext.AzureCredentialsFactory.FromServicePrincipal(
                                        clientId,
                                        clientSecret,
                                        tenantId,
                                        AzureEnvironment.AzureGlobalCloud);
                var azure = Microsoft.Azure.Management.Fluent.Azure.Configure()
                            .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
                            .Authenticate(credentials)
                            .WithSubscription(SubscriptionId);
    
                var sqlServer = azure.SqlServers.GetByResourceGroup("test", "testsql07");
                Console.WriteLine(sqlServer.Name);
    
                var database = await sqlServer.Databases.Define("test1")
                                                       .WithEdition(DatabaseEdition.Hyperscale)
                                                       .WithServiceObjective(ServiceObjectiveName.Parse("HS_Gen5_2"))
                                                       .CreateAsync();
                Console.WriteLine(database.Edition.Value);
                Console.WriteLine(database.RequestedServiceObjectiveName.Value);
    

    enter image description here enter image description here