[{"data":1,"prerenderedAt":2386},["ShallowReactive",2],{"docs-page-en-\u002Fdocs\u002Fservices\u002Fazure-sql":3,"docs-navigation-en":2290,"docs-surround-en-\u002Fdocs\u002Fservices\u002Fazure-sql":2381},{"id":4,"title":5,"body":6,"claimDependencies":2272,"description":2276,"extension":2277,"locale":2278,"meta":2279,"missingMedia":2280,"navigation":833,"owner":2281,"path":2282,"reviewStatus":2283,"seo":2284,"staleLinks":2285,"stem":2286,"technicalRisk":2287,"translationKey":2288,"__hash__":2289},"docs_en\u002Fdocs\u002F5.services\u002F7.azure-sql.md","Azure SQL Optimization",{"type":7,"value":8,"toc":2231},"minimark",[9,13,18,21,50,54,59,62,67,78,83,109,113,116,121,127,131,150,154,157,162,168,172,190,194,198,203,235,240,267,272,299,303,308,343,348,385,391,424,428,433,453,459,489,493,497,500,506,560,566,583,588,599,605,613,617,620,625,639,644,658,663,677,682,696,700,703,708,713,719,723,727,733,737,741,747,751,755,761,765,769,775,779,783,789,793,796,801,1058,1063,1269,1274,1545,1549,1553,1556,1616,1620,1625,1639,1644,1658,1662,1667,1678,1683,1694,1698,1702,1707,1718,1723,1734,1738,1742,1753,1757,1768,1772,1776,1787,1791,1802,1806,1810,1821,1825,1836,1840,1844,1849,1852,1864,1867,1872,1875,1889,1894,1897,1914,1918,1923,1926,1937,1942,1962,1967,1969,1980,1984,2003,2007,2011,2014,2028,2032,2035,2049,2053,2058,2072,2078,2082,2085,2157,2166,2170,2173,2205,2208,2213,2227],[10,11,12],"p",{},"Jetscale provides AI-powered cost optimization for Azure SQL Database, including single databases, elastic pools, and Azure SQL Managed Instance. Our specialized agents analyze your database workloads to identify right-sizing opportunities and configuration improvements.",[14,15,17],"h2",{"id":16},"overview","Overview",[10,19,20],{},"Jetscale optimizes Azure SQL resources by analyzing:",[22,23,24,32,38,44],"ul",{},[25,26,27,31],"li",{},[28,29,30],"strong",{},"Database utilization",": DTU\u002FvCore usage, CPU, memory, and I\u002FO patterns",[25,33,34,37],{},[28,35,36],{},"Cost analysis",": Current spending vs. optimal configuration",[25,39,40,43],{},[28,41,42],{},"Performance metrics",": Query performance, connection patterns, storage usage",[25,45,46,49],{},[28,47,48],{},"Service tier alignment",": Basic, Standard, Premium, Business Critical, Hyperscale",[14,51,53],{"id":52},"supported-azure-sql-types","Supported Azure SQL Types",[55,56,58],"h3",{"id":57},"azure-sql-database-single-database","Azure SQL Database (Single Database)",[10,60,61],{},"Single databases are our primary optimization target.",[10,63,64],{},[28,65,66],{},"Database Architecture:",[68,69,74],"pre",{"className":70,"code":72,"language":73},[71],"language-text","SqlDatabase (Optimization Target, Billable)\n├── Compute (DTU or vCore)\n├── Storage (Data + Log)\n└── Backup Storage\n","text",[75,76,72],"code",{"__ignoreMap":77},"",[10,79,80],{},[28,81,82],{},"What We Optimize:",[22,84,85,91,97,103],{},[25,86,87,90],{},[28,88,89],{},"Service tier",": Right-size between Basic, Standard, Premium, Business Critical, Hyperscale",[25,92,93,96],{},[28,94,95],{},"Compute tier",": Provisioned vs. Serverless",[25,98,99,102],{},[28,100,101],{},"DTU\u002FvCore sizing",": Match actual workload requirements",[25,104,105,108],{},[28,106,107],{},"Storage configuration",": Data max size and performance tier",[55,110,112],{"id":111},"azure-sql-elastic-pools","Azure SQL Elastic Pools",[10,114,115],{},"Elastic pools share resources across multiple databases.",[10,117,118],{},[28,119,120],{},"Pool Architecture:",[68,122,125],{"className":123,"code":124,"language":73},[71],"SqlElasticPool (Optimization Target, Billable)\n├── Database 1 - Shares pool resources\n├── Database 2 - Shares pool resources\n└── Database N - Shares pool resources\n",[75,126,124],{"__ignoreMap":77},[10,128,129],{},[28,130,82],{},[22,132,133,139,144],{},[25,134,135,138],{},[28,136,137],{},"Pool sizing",": Total DTUs\u002FvCores for all databases",[25,140,141,143],{},[28,142,89],{},": Standard, Premium, Business Critical",[25,145,146,149],{},[28,147,148],{},"Database density",": Optimal number of databases per pool",[55,151,153],{"id":152},"azure-sql-managed-instance","Azure SQL Managed Instance",[10,155,156],{},"Fully managed SQL Server instance.",[10,158,159],{},[28,160,161],{},"Instance Architecture:",[68,163,166],{"className":164,"code":165,"language":73},[71],"SqlManagedInstance (Optimization Target, Billable)\n├── Compute (vCores)\n├── Storage\n└── Multiple Databases\n",[75,167,165],{"__ignoreMap":77},[10,169,170],{},[28,171,82],{},[22,173,174,180,185],{},[25,175,176,179],{},[28,177,178],{},"Instance sizing",": vCore count (4, 8, 16, 24, 32, 40, 64, 80)",[25,181,182,184],{},[28,183,89],{},": General Purpose vs. Business Critical",[25,186,187,189],{},[28,188,107],{},": Data and log storage sizing",[14,191,193],{"id":192},"service-tiers","Service Tiers",[55,195,197],{"id":196},"dtu-based-model-single-database-elastic-pools","DTU-Based Model (Single Database & Elastic Pools)",[10,199,200],{},[28,201,202],{},"Basic Tier",[22,204,205,211,217,223,229],{},[25,206,207,210],{},[28,208,209],{},"Use for",": Small databases, development, testing, light workloads",[25,212,213,216],{},[28,214,215],{},"DTU range",": 5 DTUs",[25,218,219,222],{},[28,220,221],{},"Max database size",": 2 GB",[25,224,225,228],{},[28,226,227],{},"Typical cost",": ~$5\u002Fmonth",[25,230,231,234],{},[28,232,233],{},"Best when",": Learning, prototyping, minimal production use",[10,236,237],{},[28,238,239],{},"Standard Tier",[22,241,242,247,252,257,262],{},[25,243,244,246],{},[28,245,209],{},": Most production workloads, web applications, line-of-business apps",[25,248,249,251],{},[28,250,215],{},": 10, 20, 50, 100, 200, 400, 800, 1600, 3000 DTUs",[25,253,254,256],{},[28,255,221],{},": Up to 1 TB",[25,258,259,261],{},[28,260,227],{},": $15-$1,500\u002Fmonth",[25,263,264,266],{},[28,265,233],{},": Predictable performance requirements, balanced workloads",[10,268,269],{},[28,270,271],{},"Premium Tier",[22,273,274,279,284,289,294],{},[25,275,276,278],{},[28,277,209],{},": Mission-critical applications, high transaction rate, low latency",[25,280,281,283],{},[28,282,215],{},": 125, 250, 500, 1000, 1750, 4000 DTUs",[25,285,286,288],{},[28,287,221],{},": Up to 4 TB",[25,290,291,293],{},[28,292,227],{},": $465-$14,500\u002Fmonth",[25,295,296,298],{},[28,297,233],{},": Highest performance, availability, and recovery requirements",[55,300,302],{"id":301},"vcore-based-model-all-types","vCore-Based Model (All Types)",[10,304,305],{},[28,306,307],{},"General Purpose",[22,309,310,315,321,327,333,338],{},[25,311,312,314],{},[28,313,209],{},": Most production workloads, balanced compute and I\u002FO",[25,316,317,320],{},[28,318,319],{},"vCores",": 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 24, 32, 40, 80, 128",[25,322,323,326],{},[28,324,325],{},"Max memory",": 625 GB (128 vCore)",[25,328,329,332],{},[28,330,331],{},"Storage",": Remote storage (SSD), up to 4 TB (single) or 16 TB (managed instance)",[25,334,335,337],{},[28,336,227],{},": $300-$8,000\u002Fmonth",[25,339,340,342],{},[28,341,233],{},": Standard business workloads",[10,344,345],{},[28,346,347],{},"Business Critical",[22,349,350,355,360,364,369,375,380],{},[25,351,352,354],{},[28,353,209],{},": Mission-critical applications, low latency, high availability",[25,356,357,359],{},[28,358,319],{},": Same range as General Purpose",[25,361,362,326],{},[28,363,325],{},[25,365,366,368],{},[28,367,331],{},": Local SSD, up to 4 TB (single) or 16 TB (managed instance)",[25,370,371,374],{},[28,372,373],{},"Built-in HA",": Always-on availability group with readable secondary replicas",[25,376,377,379],{},[28,378,227],{},": 2.5x General Purpose pricing",[25,381,382,384],{},[28,383,233],{},": Highest performance and availability required",[10,386,387,390],{},[28,388,389],{},"Hyperscale"," (Single Database only)",[22,392,393,398,403,408,414,419],{},[25,394,395,397],{},[28,396,209],{},": Very large databases (100 TB+), rapid scale-up\u002Fdown",[25,399,400,402],{},[28,401,319],{},": 2-80 vCores",[25,404,405,407],{},[28,406,331],{},": Highly scalable, up to 100 TB",[25,409,410,413],{},[28,411,412],{},"Architecture",": Multi-tier with page servers and compute nodes",[25,415,416,418],{},[28,417,227],{},": Similar to General Purpose, storage charged separately",[25,420,421,423],{},[28,422,233],{},": Database > 4 TB, need rapid scaling",[55,425,427],{"id":426},"compute-tiers","Compute Tiers",[10,429,430],{},[28,431,432],{},"Provisioned",[22,434,435,441,447],{},[25,436,437,440],{},[28,438,439],{},"Billing",": Per second for compute resources",[25,442,443,446],{},[28,444,445],{},"Best for",": Predictable workloads, continuous usage",[25,448,449,452],{},[28,450,451],{},"Minimum",": No minimum compute",[10,454,455,458],{},[28,456,457],{},"Serverless"," (General Purpose only)",[22,460,461,466,471,477,483],{},[25,462,463,465],{},[28,464,439],{},": Per second when active, auto-pause when idle",[25,467,468,470],{},[28,469,445],{},": Intermittent, unpredictable usage patterns",[25,472,473,476],{},[28,474,475],{},"Auto-pause",": Configurable delay (1 hour - 7 days)",[25,478,479,482],{},[28,480,481],{},"Savings",": Up to 90% during idle periods",[25,484,485,488],{},[28,486,487],{},"Note",": Cold start delay when resuming from paused state",[14,490,492],{"id":491},"how-jetscale-optimizes-azure-sql","How Jetscale Optimizes Azure SQL",[55,494,496],{"id":495},"_1-data-collection","1. Data Collection",[10,498,499],{},"Jetscale analyzes multiple data sources:",[10,501,502,505],{},[28,503,504],{},"Azure Monitor Metrics"," (14-day rolling window):",[22,507,508,514,520,526,536,542,548,554],{},[25,509,510,513],{},[75,511,512],{},"cpu_percent"," - CPU utilization",[25,515,516,519],{},[75,517,518],{},"dtu_consumption_percent"," - DTU usage (DTU model)",[25,521,522,525],{},[75,523,524],{},"storage_percent"," - Storage utilization",[25,527,528,531,532,535],{},[75,529,530],{},"connection_successful"," \u002F ",[75,533,534],{},"connection_failed"," - Connection patterns",[25,537,538,541],{},[75,539,540],{},"sessions_percent"," - Active sessions",[25,543,544,547],{},[75,545,546],{},"workers_percent"," - Worker thread usage",[25,549,550,553],{},[75,551,552],{},"deadlock"," - Deadlock occurrences",[25,555,556,559],{},[75,557,558],{},"log_write_percent"," - Transaction log write usage",[10,561,562,565],{},[28,563,564],{},"Azure Resource Manager Data",":",[22,567,568,571,574,577,580],{},[25,569,570],{},"Service tier and compute tier",[25,572,573],{},"DTU\u002FvCore configuration",[25,575,576],{},"Current storage size and max size",[25,578,579],{},"Geo-replication status",[25,581,582],{},"Backup retention settings",[10,584,585,565],{},[28,586,587],{},"Cost Management Data",[22,589,590,593,596],{},[25,591,592],{},"Current monthly spend per database",[25,594,595],{},"Compute, storage, and backup costs breakdown",[25,597,598],{},"Historical cost trends",[10,600,601,604],{},[28,602,603],{},"Azure Advisor"," (if available):",[22,606,607,610],{},[25,608,609],{},"Azure-generated right-sizing recommendations",[25,611,612],{},"Performance optimization suggestions",[55,614,616],{"id":615},"_2-analysis","2. Analysis",[10,618,619],{},"Our AI agents perform deep analysis:",[10,621,622],{},[28,623,624],{},"Utilization Patterns:",[22,626,627,630,633,636],{},[25,628,629],{},"Peak vs. average DTU\u002FvCore usage",[25,631,632],{},"Time-of-day patterns (identify idle periods for serverless)",[25,634,635],{},"Day-of-week patterns (weekend vs. weekday load)",[25,637,638],{},"Growth trends over time",[10,640,641],{},[28,642,643],{},"Performance Assessment:",[22,645,646,649,652,655],{},[25,647,648],{},"Query performance metrics",[25,650,651],{},"Connection patterns and failures",[25,653,654],{},"Deadlock frequency",[25,656,657],{},"Transaction log pressure",[10,659,660],{},[28,661,662],{},"Cost Modeling:",[22,664,665,668,671,674],{},[25,666,667],{},"Current cost breakdown (compute, storage, backup)",[25,669,670],{},"Projected cost for alternative configurations",[25,672,673],{},"Provisioned vs. Serverless cost comparison",[25,675,676],{},"Reserved capacity opportunities",[10,678,679],{},[28,680,681],{},"Tier Selection:",[22,683,684,687,690,693],{},[25,685,686],{},"Basic vs. Standard vs. Premium alignment",[25,688,689],{},"General Purpose vs. Business Critical requirements",[25,691,692],{},"Hyperscale suitability for large databases",[25,694,695],{},"DTU vs. vCore model efficiency",[55,697,699],{"id":698},"_3-recommendations","3. Recommendations",[10,701,702],{},"Jetscale generates specific, actionable recommendations:",[704,705,707],"h4",{"id":706},"service-tier-downgrade","Service Tier Downgrade",[10,709,710],{},[28,711,712],{},"Example Recommendation:",[68,714,717],{"className":715,"code":716,"language":73},[71],"Resource: app-database-prod\nCurrent: Premium P2 (250 DTUs, $930\u002Fmonth)\nRecommended: Standard S3 (100 DTUs, $300\u002Fmonth)\n\nCost Impact:\n- Current: $930\u002Fmonth\n- Projected: $300\u002Fmonth\n- Savings: $630\u002Fmonth (68%), $7,560\u002Fyear\n\nPerformance Analysis:\n- Average DTU usage: 35%\n- Peak DTU usage: 58%\n- Connection patterns: Normal\n- Query performance: Well within Standard tier capabilities\n\nRisk: Low - Peak usage well below new tier limits\nNote: Premium tier features (lower latency, more IOPS) not fully utilized\n",[75,718,716],{"__ignoreMap":77},[704,720,722],{"id":721},"dtu-right-sizing","DTU Right-Sizing",[10,724,725],{},[28,726,712],{},[68,728,731],{"className":729,"code":730,"language":73},[71],"Resource: customer-db-01\nCurrent: Standard S7 (800 DTUs, $600\u002Fmonth)\nRecommended: Standard S3 (100 DTUs, $300\u002Fmonth)\n\nCost Impact:\n- Current: $600\u002Fmonth\n- Projected: $300\u002Fmonth\n- Savings: $300\u002Fmonth (50%), $3,600\u002Fyear\n\nPerformance Analysis:\n- Average DTU usage: 18%\n- Peak DTU usage: 42%\n- 95th percentile: 35%\n- Recommended tier provides 2.4x headroom above peak\n\nRisk: Very Low - Substantial headroom maintained\n",[75,732,730],{"__ignoreMap":77},[704,734,736],{"id":735},"serverless-migration","Serverless Migration",[10,738,739],{},[28,740,712],{},[68,742,745],{"className":743,"code":744,"language":73},[71],"Resource: reporting-database\nCurrent: General Purpose (4 vCores, Provisioned, $730\u002Fmonth)\nRecommended: General Purpose (4 vCores, Serverless, ~$290\u002Fmonth)\n\nCost Impact:\n- Current: $730\u002Fmonth (24\u002F7 billing)\n- Projected: $290\u002Fmonth (avg 40% active time)\n- Savings: $440\u002Fmonth (60%), $5,280\u002Fyear\n\nUsage Analysis:\n- Active hours: ~10 hours\u002Fday (business hours only)\n- Idle time: Nights and weekends (60% of time)\n- Query patterns: Batch processing and reporting\n- Cold start tolerance: Acceptable (reporting use case)\n\nConfiguration:\n- Auto-pause delay: 1 hour\n- Min vCores: 1 (when active)\n- Max vCores: 4 (during peak)\n\nRisk: Very Low - Intermittent usage pattern ideal for serverless\nNote: ~2-minute resume time from paused state\n",[75,746,744],{"__ignoreMap":77},[704,748,750],{"id":749},"vcore-optimization","vCore Optimization",[10,752,753],{},[28,754,712],{},[68,756,759],{"className":757,"code":758,"language":73},[71],"Resource: api-database-prod\nCurrent: General Purpose (16 vCores, $1,460\u002Fmonth)\nRecommended: General Purpose (8 vCores, $730\u002Fmonth)\n\nCost Impact:\n- Current: $1,460\u002Fmonth\n- Projected: $730\u002Fmonth\n- Savings: $730\u002Fmonth (50%), $8,760\u002Fyear\n\nPerformance Analysis:\n- Average CPU: 22%\n- Peak CPU: 38%\n- Memory usage: 45%\n- I\u002FO patterns: Well within General Purpose limits\n\nRisk: Low - 2.6x headroom above peak CPU usage\n",[75,760,758],{"__ignoreMap":77},[704,762,764],{"id":763},"business-critical-general-purpose","Business Critical → General Purpose",[10,766,767],{},[28,768,712],{},[68,770,773],{"className":771,"code":772,"language":73},[71],"Resource: legacy-app-database\nCurrent: Business Critical (8 vCores, $3,650\u002Fmonth)\nRecommended: General Purpose (8 vCores, $1,460\u002Fmonth)\n\nCost Impact:\n- Current: $3,650\u002Fmonth\n- Projected: $1,460\u002Fmonth\n- Savings: $2,190\u002Fmonth (60%), $26,280\u002Fyear\n\nWorkload Analysis:\n- Business Critical features not utilized:\n  × No readable secondary replicas in use\n  × Low latency requirements not critical\n  × Local SSD performance not required\n- Performance requirements met by General Purpose\n\nRisk: Medium - Verify application tolerates remote storage latency\nRecommendation: Test in staging environment first\n",[75,774,772],{"__ignoreMap":77},[704,776,778],{"id":777},"elastic-pool-consolidation","Elastic Pool Consolidation",[10,780,781],{},[28,782,712],{},[68,784,787],{"className":785,"code":786,"language":73},[71],"Resource: 12 Standard S3 databases\nCurrent: 12 × S3 (100 DTUs each, $3,600\u002Fmonth total)\nRecommended: 1 × Elastic Pool (600 eDTUs, $900\u002Fmonth)\n\nCost Impact:\n- Current: $3,600\u002Fmonth (12 individual databases)\n- Projected: $900\u002Fmonth (elastic pool with 12 databases)\n- Savings: $2,700\u002Fmonth (75%), $32,400\u002Fyear\n\nUsage Analysis:\n- Individual database peak usage: 40-60 DTUs\n- Simultaneous peak usage: Rare (time-shifted workloads)\n- Total concurrent DTU usage: ~300 DTUs peak\n- Pool provides 600 eDTUs with resource sharing\n\nRisk: Low - Sufficient pool capacity for peak concurrent usage\nNote: Databases share pool resources, reducing over-provisioning\n",[75,788,786],{"__ignoreMap":77},[55,790,792],{"id":791},"_4-terraform-generation","4. Terraform Generation",[10,794,795],{},"For each recommendation, Jetscale generates production-ready Terraform code:",[10,797,798],{},[28,799,800],{},"Example: Service Tier Optimization",[68,802,806],{"className":803,"code":804,"language":805,"meta":77,"style":77},"language-hcl shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Azure SQL Database Optimization\n# Generated by Jetscale on 2024-01-15\n# Recommendation ID: rec_azuresql_001\n\nresource \"azurerm_mssql_database\" \"app_database_prod\" {\n  name      = \"app-database-prod\"\n  server_id = azurerm_mssql_server.example.id\n\n  # Previous: Premium P2 (250 DTUs, $930\u002Fmonth)\n  # Optimized: Standard S3 (100 DTUs, $300\u002Fmonth)\n  # Cost Reduction: 68% ($630\u002Fmonth, $7,560\u002Fyear)\n  #\n  # Justification:\n  # - Average DTU usage: 35%\n  # - Peak DTU usage: 58%\n  # - Premium tier features (lower latency, higher IOPS) not fully utilized\n  # - Standard S3 provides adequate performance for workload\n  sku_name = \"S3\"\n\n  max_size_gb = 250\n\n  # Existing configuration preserved\n  collation               = \"SQL_Latin1_General_CP1_CI_AS\"\n  zone_redundant          = false\n  read_scale              = false\n  storage_account_type    = \"Geo\"\n\n  threat_detection_policy {\n    state                      = \"Enabled\"\n    email_account_admins       = \"Enabled\"\n    retention_days             = 30\n  }\n\n  tags = merge(\n    var.tags,\n    {\n      \"jetscale:optimized\"      = \"true\"\n      \"jetscale:recommendation\" = \"rec_azuresql_001\"\n      \"jetscale:previous_sku\"   = \"P2\"\n    }\n  )\n}\n","hcl",[75,807,808,816,822,828,835,841,847,853,858,864,870,876,882,888,894,900,906,912,918,923,929,934,940,946,952,958,964,969,975,981,987,993,999,1004,1010,1016,1022,1028,1034,1040,1046,1052],{"__ignoreMap":77},[809,810,813],"span",{"class":811,"line":812},"line",1,[809,814,815],{},"# Azure SQL Database Optimization\n",[809,817,819],{"class":811,"line":818},2,[809,820,821],{},"# Generated by Jetscale on 2024-01-15\n",[809,823,825],{"class":811,"line":824},3,[809,826,827],{},"# Recommendation ID: rec_azuresql_001\n",[809,829,831],{"class":811,"line":830},4,[809,832,834],{"emptyLinePlaceholder":833},true,"\n",[809,836,838],{"class":811,"line":837},5,[809,839,840],{},"resource \"azurerm_mssql_database\" \"app_database_prod\" {\n",[809,842,844],{"class":811,"line":843},6,[809,845,846],{},"  name      = \"app-database-prod\"\n",[809,848,850],{"class":811,"line":849},7,[809,851,852],{},"  server_id = azurerm_mssql_server.example.id\n",[809,854,856],{"class":811,"line":855},8,[809,857,834],{"emptyLinePlaceholder":833},[809,859,861],{"class":811,"line":860},9,[809,862,863],{},"  # Previous: Premium P2 (250 DTUs, $930\u002Fmonth)\n",[809,865,867],{"class":811,"line":866},10,[809,868,869],{},"  # Optimized: Standard S3 (100 DTUs, $300\u002Fmonth)\n",[809,871,873],{"class":811,"line":872},11,[809,874,875],{},"  # Cost Reduction: 68% ($630\u002Fmonth, $7,560\u002Fyear)\n",[809,877,879],{"class":811,"line":878},12,[809,880,881],{},"  #\n",[809,883,885],{"class":811,"line":884},13,[809,886,887],{},"  # Justification:\n",[809,889,891],{"class":811,"line":890},14,[809,892,893],{},"  # - Average DTU usage: 35%\n",[809,895,897],{"class":811,"line":896},15,[809,898,899],{},"  # - Peak DTU usage: 58%\n",[809,901,903],{"class":811,"line":902},16,[809,904,905],{},"  # - Premium tier features (lower latency, higher IOPS) not fully utilized\n",[809,907,909],{"class":811,"line":908},17,[809,910,911],{},"  # - Standard S3 provides adequate performance for workload\n",[809,913,915],{"class":811,"line":914},18,[809,916,917],{},"  sku_name = \"S3\"\n",[809,919,921],{"class":811,"line":920},19,[809,922,834],{"emptyLinePlaceholder":833},[809,924,926],{"class":811,"line":925},20,[809,927,928],{},"  max_size_gb = 250\n",[809,930,932],{"class":811,"line":931},21,[809,933,834],{"emptyLinePlaceholder":833},[809,935,937],{"class":811,"line":936},22,[809,938,939],{},"  # Existing configuration preserved\n",[809,941,943],{"class":811,"line":942},23,[809,944,945],{},"  collation               = \"SQL_Latin1_General_CP1_CI_AS\"\n",[809,947,949],{"class":811,"line":948},24,[809,950,951],{},"  zone_redundant          = false\n",[809,953,955],{"class":811,"line":954},25,[809,956,957],{},"  read_scale              = false\n",[809,959,961],{"class":811,"line":960},26,[809,962,963],{},"  storage_account_type    = \"Geo\"\n",[809,965,967],{"class":811,"line":966},27,[809,968,834],{"emptyLinePlaceholder":833},[809,970,972],{"class":811,"line":971},28,[809,973,974],{},"  threat_detection_policy {\n",[809,976,978],{"class":811,"line":977},29,[809,979,980],{},"    state                      = \"Enabled\"\n",[809,982,984],{"class":811,"line":983},30,[809,985,986],{},"    email_account_admins       = \"Enabled\"\n",[809,988,990],{"class":811,"line":989},31,[809,991,992],{},"    retention_days             = 30\n",[809,994,996],{"class":811,"line":995},32,[809,997,998],{},"  }\n",[809,1000,1002],{"class":811,"line":1001},33,[809,1003,834],{"emptyLinePlaceholder":833},[809,1005,1007],{"class":811,"line":1006},34,[809,1008,1009],{},"  tags = merge(\n",[809,1011,1013],{"class":811,"line":1012},35,[809,1014,1015],{},"    var.tags,\n",[809,1017,1019],{"class":811,"line":1018},36,[809,1020,1021],{},"    {\n",[809,1023,1025],{"class":811,"line":1024},37,[809,1026,1027],{},"      \"jetscale:optimized\"      = \"true\"\n",[809,1029,1031],{"class":811,"line":1030},38,[809,1032,1033],{},"      \"jetscale:recommendation\" = \"rec_azuresql_001\"\n",[809,1035,1037],{"class":811,"line":1036},39,[809,1038,1039],{},"      \"jetscale:previous_sku\"   = \"P2\"\n",[809,1041,1043],{"class":811,"line":1042},40,[809,1044,1045],{},"    }\n",[809,1047,1049],{"class":811,"line":1048},41,[809,1050,1051],{},"  )\n",[809,1053,1055],{"class":811,"line":1054},42,[809,1056,1057],{},"}\n",[10,1059,1060],{},[28,1061,1062],{},"Example: Serverless Migration",[68,1064,1066],{"className":803,"code":1065,"language":805,"meta":77,"style":77},"# Azure SQL Serverless Migration\n# Generated by Jetscale on 2024-01-15\n\nresource \"azurerm_mssql_database\" \"reporting_database\" {\n  name      = \"reporting-database\"\n  server_id = azurerm_mssql_server.example.id\n\n  # Previous: Provisioned (4 vCores, 24\u002F7, $730\u002Fmonth)\n  # Optimized: Serverless (1-4 vCores, ~40% active, $290\u002Fmonth)\n  # Cost Reduction: 60% ($440\u002Fmonth, $5,280\u002Fyear)\n  #\n  # Usage Pattern Analysis:\n  # - Active: Business hours only (~10 hrs\u002Fday)\n  # - Idle: Nights and weekends (60% of time)\n  # - Use case: Batch reporting (cold start acceptable)\n  #\n  # Serverless Configuration:\n  # - Auto-pause after 1 hour of inactivity\n  # - Min 1 vCore when active, max 4 vCores\n  # - ~2-minute resume time from paused state\n  sku_name = \"GP_S_Gen5_4\"\n\n  min_capacity = 1.0\n  max_capacity = 4.0\n\n  # Auto-pause after 1 hour (60 minutes) of inactivity\n  auto_pause_delay_in_minutes = 60\n\n  max_size_gb = 100\n\n  collation               = \"SQL_Latin1_General_CP1_CI_AS\"\n  zone_redundant          = false\n  read_scale              = false\n  storage_account_type    = \"Geo\"\n\n  tags = merge(\n    var.tags,\n    {\n      \"jetscale:optimized\"     = \"true\"\n      \"jetscale:compute_model\" = \"serverless\"\n      \"jetscale:previous_sku\"  = \"GP_Gen5_4\"\n    }\n  )\n}\n",[75,1067,1068,1073,1077,1081,1086,1091,1095,1099,1104,1109,1114,1118,1123,1128,1133,1138,1142,1147,1152,1157,1162,1167,1171,1176,1181,1185,1190,1195,1199,1204,1208,1212,1216,1220,1224,1228,1232,1236,1240,1245,1250,1255,1259,1264],{"__ignoreMap":77},[809,1069,1070],{"class":811,"line":812},[809,1071,1072],{},"# Azure SQL Serverless Migration\n",[809,1074,1075],{"class":811,"line":818},[809,1076,821],{},[809,1078,1079],{"class":811,"line":824},[809,1080,834],{"emptyLinePlaceholder":833},[809,1082,1083],{"class":811,"line":830},[809,1084,1085],{},"resource \"azurerm_mssql_database\" \"reporting_database\" {\n",[809,1087,1088],{"class":811,"line":837},[809,1089,1090],{},"  name      = \"reporting-database\"\n",[809,1092,1093],{"class":811,"line":843},[809,1094,852],{},[809,1096,1097],{"class":811,"line":849},[809,1098,834],{"emptyLinePlaceholder":833},[809,1100,1101],{"class":811,"line":855},[809,1102,1103],{},"  # Previous: Provisioned (4 vCores, 24\u002F7, $730\u002Fmonth)\n",[809,1105,1106],{"class":811,"line":860},[809,1107,1108],{},"  # Optimized: Serverless (1-4 vCores, ~40% active, $290\u002Fmonth)\n",[809,1110,1111],{"class":811,"line":866},[809,1112,1113],{},"  # Cost Reduction: 60% ($440\u002Fmonth, $5,280\u002Fyear)\n",[809,1115,1116],{"class":811,"line":872},[809,1117,881],{},[809,1119,1120],{"class":811,"line":878},[809,1121,1122],{},"  # Usage Pattern Analysis:\n",[809,1124,1125],{"class":811,"line":884},[809,1126,1127],{},"  # - Active: Business hours only (~10 hrs\u002Fday)\n",[809,1129,1130],{"class":811,"line":890},[809,1131,1132],{},"  # - Idle: Nights and weekends (60% of time)\n",[809,1134,1135],{"class":811,"line":896},[809,1136,1137],{},"  # - Use case: Batch reporting (cold start acceptable)\n",[809,1139,1140],{"class":811,"line":902},[809,1141,881],{},[809,1143,1144],{"class":811,"line":908},[809,1145,1146],{},"  # Serverless Configuration:\n",[809,1148,1149],{"class":811,"line":914},[809,1150,1151],{},"  # - Auto-pause after 1 hour of inactivity\n",[809,1153,1154],{"class":811,"line":920},[809,1155,1156],{},"  # - Min 1 vCore when active, max 4 vCores\n",[809,1158,1159],{"class":811,"line":925},[809,1160,1161],{},"  # - ~2-minute resume time from paused state\n",[809,1163,1164],{"class":811,"line":931},[809,1165,1166],{},"  sku_name = \"GP_S_Gen5_4\"\n",[809,1168,1169],{"class":811,"line":936},[809,1170,834],{"emptyLinePlaceholder":833},[809,1172,1173],{"class":811,"line":942},[809,1174,1175],{},"  min_capacity = 1.0\n",[809,1177,1178],{"class":811,"line":948},[809,1179,1180],{},"  max_capacity = 4.0\n",[809,1182,1183],{"class":811,"line":954},[809,1184,834],{"emptyLinePlaceholder":833},[809,1186,1187],{"class":811,"line":960},[809,1188,1189],{},"  # Auto-pause after 1 hour (60 minutes) of inactivity\n",[809,1191,1192],{"class":811,"line":966},[809,1193,1194],{},"  auto_pause_delay_in_minutes = 60\n",[809,1196,1197],{"class":811,"line":971},[809,1198,834],{"emptyLinePlaceholder":833},[809,1200,1201],{"class":811,"line":977},[809,1202,1203],{},"  max_size_gb = 100\n",[809,1205,1206],{"class":811,"line":983},[809,1207,834],{"emptyLinePlaceholder":833},[809,1209,1210],{"class":811,"line":989},[809,1211,945],{},[809,1213,1214],{"class":811,"line":995},[809,1215,951],{},[809,1217,1218],{"class":811,"line":1001},[809,1219,957],{},[809,1221,1222],{"class":811,"line":1006},[809,1223,963],{},[809,1225,1226],{"class":811,"line":1012},[809,1227,834],{"emptyLinePlaceholder":833},[809,1229,1230],{"class":811,"line":1018},[809,1231,1009],{},[809,1233,1234],{"class":811,"line":1024},[809,1235,1015],{},[809,1237,1238],{"class":811,"line":1030},[809,1239,1021],{},[809,1241,1242],{"class":811,"line":1036},[809,1243,1244],{},"      \"jetscale:optimized\"     = \"true\"\n",[809,1246,1247],{"class":811,"line":1042},[809,1248,1249],{},"      \"jetscale:compute_model\" = \"serverless\"\n",[809,1251,1252],{"class":811,"line":1048},[809,1253,1254],{},"      \"jetscale:previous_sku\"  = \"GP_Gen5_4\"\n",[809,1256,1257],{"class":811,"line":1054},[809,1258,1045],{},[809,1260,1262],{"class":811,"line":1261},43,[809,1263,1051],{},[809,1265,1267],{"class":811,"line":1266},44,[809,1268,1057],{},[10,1270,1271],{},[28,1272,1273],{},"Example: Elastic Pool",[68,1275,1277],{"className":803,"code":1276,"language":805,"meta":77,"style":77},"# Azure SQL Elastic Pool Consolidation\n# Generated by Jetscale on 2024-01-15\n\nresource \"azurerm_mssql_elasticpool\" \"app_pool\" {\n  name                = \"app-elastic-pool\"\n  resource_group_name = var.resource_group_name\n  location            = var.location\n  server_name         = azurerm_mssql_server.example.name\n\n  # Previous: 12 individual S3 databases (1200 DTUs total, $3,600\u002Fmonth)\n  # Optimized: Elastic pool (600 eDTUs shared, $900\u002Fmonth)\n  # Cost Reduction: 75% ($2,700\u002Fmonth, $32,400\u002Fyear)\n  #\n  # Analysis:\n  # - Individual database peaks rarely coincide\n  # - Peak concurrent usage: ~300 DTUs\n  # - Pool provides 600 eDTUs with 2x headroom\n  # - Resource sharing eliminates over-provisioning\n  sku {\n    name     = \"StandardPool\"\n    tier     = \"Standard\"\n    capacity = 600\n  }\n\n  per_database_settings {\n    min_capacity = 10\n    max_capacity = 100\n  }\n\n  max_size_gb = 750\n\n  tags = merge(\n    var.tags,\n    {\n      \"jetscale:optimized\"         = \"true\"\n      \"jetscale:pool_type\"         = \"consolidation\"\n      \"jetscale:database_count\"    = \"12\"\n      \"jetscale:previous_total_cost\" = \"$3600\"\n    }\n  )\n}\n\n# Move databases to elastic pool\nresource \"azurerm_mssql_database\" \"pooled_databases\" {\n  count = 12\n\n  name           = \"app-database-${count.index + 1}\"\n  server_id      = azurerm_mssql_server.example.id\n  elastic_pool_id = azurerm_mssql_elasticpool.app_pool.id\n\n  # Databases now share pool resources\n  # No individual sku_name needed\n\n  tags = var.tags\n}\n",[75,1278,1279,1284,1288,1292,1297,1302,1307,1312,1317,1321,1326,1331,1336,1340,1345,1350,1355,1360,1365,1370,1375,1380,1385,1389,1393,1398,1403,1408,1412,1416,1421,1425,1429,1433,1437,1442,1447,1452,1457,1461,1465,1469,1473,1478,1483,1489,1494,1500,1506,1512,1517,1523,1529,1534,1540],{"__ignoreMap":77},[809,1280,1281],{"class":811,"line":812},[809,1282,1283],{},"# Azure SQL Elastic Pool Consolidation\n",[809,1285,1286],{"class":811,"line":818},[809,1287,821],{},[809,1289,1290],{"class":811,"line":824},[809,1291,834],{"emptyLinePlaceholder":833},[809,1293,1294],{"class":811,"line":830},[809,1295,1296],{},"resource \"azurerm_mssql_elasticpool\" \"app_pool\" {\n",[809,1298,1299],{"class":811,"line":837},[809,1300,1301],{},"  name                = \"app-elastic-pool\"\n",[809,1303,1304],{"class":811,"line":843},[809,1305,1306],{},"  resource_group_name = var.resource_group_name\n",[809,1308,1309],{"class":811,"line":849},[809,1310,1311],{},"  location            = var.location\n",[809,1313,1314],{"class":811,"line":855},[809,1315,1316],{},"  server_name         = azurerm_mssql_server.example.name\n",[809,1318,1319],{"class":811,"line":860},[809,1320,834],{"emptyLinePlaceholder":833},[809,1322,1323],{"class":811,"line":866},[809,1324,1325],{},"  # Previous: 12 individual S3 databases (1200 DTUs total, $3,600\u002Fmonth)\n",[809,1327,1328],{"class":811,"line":872},[809,1329,1330],{},"  # Optimized: Elastic pool (600 eDTUs shared, $900\u002Fmonth)\n",[809,1332,1333],{"class":811,"line":878},[809,1334,1335],{},"  # Cost Reduction: 75% ($2,700\u002Fmonth, $32,400\u002Fyear)\n",[809,1337,1338],{"class":811,"line":884},[809,1339,881],{},[809,1341,1342],{"class":811,"line":890},[809,1343,1344],{},"  # Analysis:\n",[809,1346,1347],{"class":811,"line":896},[809,1348,1349],{},"  # - Individual database peaks rarely coincide\n",[809,1351,1352],{"class":811,"line":902},[809,1353,1354],{},"  # - Peak concurrent usage: ~300 DTUs\n",[809,1356,1357],{"class":811,"line":908},[809,1358,1359],{},"  # - Pool provides 600 eDTUs with 2x headroom\n",[809,1361,1362],{"class":811,"line":914},[809,1363,1364],{},"  # - Resource sharing eliminates over-provisioning\n",[809,1366,1367],{"class":811,"line":920},[809,1368,1369],{},"  sku {\n",[809,1371,1372],{"class":811,"line":925},[809,1373,1374],{},"    name     = \"StandardPool\"\n",[809,1376,1377],{"class":811,"line":931},[809,1378,1379],{},"    tier     = \"Standard\"\n",[809,1381,1382],{"class":811,"line":936},[809,1383,1384],{},"    capacity = 600\n",[809,1386,1387],{"class":811,"line":942},[809,1388,998],{},[809,1390,1391],{"class":811,"line":948},[809,1392,834],{"emptyLinePlaceholder":833},[809,1394,1395],{"class":811,"line":954},[809,1396,1397],{},"  per_database_settings {\n",[809,1399,1400],{"class":811,"line":960},[809,1401,1402],{},"    min_capacity = 10\n",[809,1404,1405],{"class":811,"line":966},[809,1406,1407],{},"    max_capacity = 100\n",[809,1409,1410],{"class":811,"line":971},[809,1411,998],{},[809,1413,1414],{"class":811,"line":977},[809,1415,834],{"emptyLinePlaceholder":833},[809,1417,1418],{"class":811,"line":983},[809,1419,1420],{},"  max_size_gb = 750\n",[809,1422,1423],{"class":811,"line":989},[809,1424,834],{"emptyLinePlaceholder":833},[809,1426,1427],{"class":811,"line":995},[809,1428,1009],{},[809,1430,1431],{"class":811,"line":1001},[809,1432,1015],{},[809,1434,1435],{"class":811,"line":1006},[809,1436,1021],{},[809,1438,1439],{"class":811,"line":1012},[809,1440,1441],{},"      \"jetscale:optimized\"         = \"true\"\n",[809,1443,1444],{"class":811,"line":1018},[809,1445,1446],{},"      \"jetscale:pool_type\"         = \"consolidation\"\n",[809,1448,1449],{"class":811,"line":1024},[809,1450,1451],{},"      \"jetscale:database_count\"    = \"12\"\n",[809,1453,1454],{"class":811,"line":1030},[809,1455,1456],{},"      \"jetscale:previous_total_cost\" = \"$3600\"\n",[809,1458,1459],{"class":811,"line":1036},[809,1460,1045],{},[809,1462,1463],{"class":811,"line":1042},[809,1464,1051],{},[809,1466,1467],{"class":811,"line":1048},[809,1468,1057],{},[809,1470,1471],{"class":811,"line":1054},[809,1472,834],{"emptyLinePlaceholder":833},[809,1474,1475],{"class":811,"line":1261},[809,1476,1477],{},"# Move databases to elastic pool\n",[809,1479,1480],{"class":811,"line":1266},[809,1481,1482],{},"resource \"azurerm_mssql_database\" \"pooled_databases\" {\n",[809,1484,1486],{"class":811,"line":1485},45,[809,1487,1488],{},"  count = 12\n",[809,1490,1492],{"class":811,"line":1491},46,[809,1493,834],{"emptyLinePlaceholder":833},[809,1495,1497],{"class":811,"line":1496},47,[809,1498,1499],{},"  name           = \"app-database-${count.index + 1}\"\n",[809,1501,1503],{"class":811,"line":1502},48,[809,1504,1505],{},"  server_id      = azurerm_mssql_server.example.id\n",[809,1507,1509],{"class":811,"line":1508},49,[809,1510,1511],{},"  elastic_pool_id = azurerm_mssql_elasticpool.app_pool.id\n",[809,1513,1515],{"class":811,"line":1514},50,[809,1516,834],{"emptyLinePlaceholder":833},[809,1518,1520],{"class":811,"line":1519},51,[809,1521,1522],{},"  # Databases now share pool resources\n",[809,1524,1526],{"class":811,"line":1525},52,[809,1527,1528],{},"  # No individual sku_name needed\n",[809,1530,1532],{"class":811,"line":1531},53,[809,1533,834],{"emptyLinePlaceholder":833},[809,1535,1537],{"class":811,"line":1536},54,[809,1538,1539],{},"  tags = var.tags\n",[809,1541,1543],{"class":811,"line":1542},55,[809,1544,1057],{},[14,1546,1548],{"id":1547},"best-practices","Best Practices",[55,1550,1552],{"id":1551},"monitoring-after-changes","Monitoring After Changes",[10,1554,1555],{},"After applying Jetscale recommendations:",[1557,1558,1559,1579,1599],"ol",{},[25,1560,1561,1564,1565],{},[28,1562,1563],{},"First 24 Hours",": Monitor key metrics closely",[22,1566,1567,1570,1573,1576],{},[25,1568,1569],{},"CPU and DTU\u002FvCore utilization",[25,1571,1572],{},"Connection success rate",[25,1574,1575],{},"Query performance (execution time)",[25,1577,1578],{},"Transaction log usage",[25,1580,1581,1584,1585],{},[28,1582,1583],{},"Week 1",": Validate performance",[22,1586,1587,1590,1593,1596],{},[25,1588,1589],{},"Compare query execution times",[25,1591,1592],{},"Check for resource pressure indicators",[25,1594,1595],{},"Monitor connection failures",[25,1597,1598],{},"Review application error rates",[25,1600,1601,1604,1605],{},[28,1602,1603],{},"Week 2-4",": Confirm cost savings",[22,1606,1607,1610,1613],{},[25,1608,1609],{},"Verify Azure billing reflects expected savings",[25,1611,1612],{},"Check for unexpected charges",[25,1614,1615],{},"Consider reserved capacity for stable workloads",[55,1617,1619],{"id":1618},"testing-strategy","Testing Strategy",[10,1621,1622],{},[28,1623,1624],{},"Pre-Production Testing:",[1557,1626,1627,1630,1633,1636],{},[25,1628,1629],{},"Apply changes to dev\u002Fstaging environment first",[25,1631,1632],{},"Run load tests simulating peak usage",[25,1634,1635],{},"Monitor for 48-72 hours under realistic load",[25,1637,1638],{},"Validate backup\u002Frestore procedures",[10,1640,1641],{},[28,1642,1643],{},"Production Rollout:",[1557,1645,1646,1649,1652,1655],{},[25,1647,1648],{},"Schedule changes during maintenance windows",[25,1650,1651],{},"Use Azure SQL geo-replication for blue\u002Fgreen deployments",[25,1653,1654],{},"Have rollback plan ready",[25,1656,1657],{},"Monitor actively during and after change",[55,1659,1661],{"id":1660},"reserved-capacity","Reserved Capacity",[10,1663,1664],{},[28,1665,1666],{},"When to Purchase:",[22,1668,1669,1672,1675],{},[25,1670,1671],{},"Stable, long-running databases (> 1 year)",[25,1673,1674],{},"After right-sizing (don't reserve oversized resources)",[25,1676,1677],{},"Up to 80% savings vs. pay-as-you-go",[10,1679,1680],{},[28,1681,1682],{},"Jetscale Recommendations:",[22,1684,1685,1688,1691],{},[25,1686,1687],{},"1-year or 3-year commitment",[25,1689,1690],{},"Applied automatically to matching resources",[25,1692,1693],{},"Size-flexible within same service tier",[14,1695,1697],{"id":1696},"common-optimization-patterns","Common Optimization Patterns",[55,1699,1701],{"id":1700},"pattern-1-over-provisioned-premium-database","Pattern 1: Over-Provisioned Premium Database",[10,1703,1704],{},[28,1705,1706],{},"Symptoms:",[22,1708,1709,1712,1715],{},[25,1710,1711],{},"Premium tier with low DTU usage (\u003C40%)",[25,1713,1714],{},"High availability features not utilized",[25,1716,1717],{},"Lower latency not critical for application",[10,1719,1720],{},[28,1721,1722],{},"Jetscale Recommendation:",[22,1724,1725,1728,1731],{},[25,1726,1727],{},"Downgrade to Standard tier",[25,1729,1730],{},"Typical savings: 60-70%",[25,1732,1733],{},"Risk: Low (verify latency requirements)",[55,1735,1737],{"id":1736},"pattern-2-idle-development-databases","Pattern 2: Idle Development Databases",[10,1739,1740],{},[28,1741,1706],{},[22,1743,1744,1747,1750],{},[25,1745,1746],{},"Databases used only during business hours",[25,1748,1749],{},"Zero activity nights and weekends",[25,1751,1752],{},"Development or reporting workloads",[10,1754,1755],{},[28,1756,1722],{},[22,1758,1759,1762,1765],{},[25,1760,1761],{},"Migrate to Serverless compute tier",[25,1763,1764],{},"Typical savings: 50-80%",[25,1766,1767],{},"Risk: Very Low (non-continuous usage)",[55,1769,1771],{"id":1770},"pattern-3-multiple-small-databases","Pattern 3: Multiple Small Databases",[10,1773,1774],{},[28,1775,1706],{},[22,1777,1778,1781,1784],{},[25,1779,1780],{},"Many databases with similar usage patterns",[25,1782,1783],{},"Individual database peaks don't coincide",[25,1785,1786],{},"Over-provisioning due to peak capacity per database",[10,1788,1789],{},[28,1790,1722],{},[22,1792,1793,1796,1799],{},[25,1794,1795],{},"Consolidate into Elastic Pool",[25,1797,1798],{},"Typical savings: 60-75%",[25,1800,1801],{},"Risk: Low (resource sharing reduces waste)",[55,1803,1805],{"id":1804},"pattern-4-business-critical-over-provisioning","Pattern 4: Business Critical Over-Provisioning",[10,1807,1808],{},[28,1809,1706],{},[22,1811,1812,1815,1818],{},[25,1813,1814],{},"Business Critical tier without HA requirements",[25,1816,1817],{},"Readable secondary replicas not used",[25,1819,1820],{},"Local SSD performance not required",[10,1822,1823],{},[28,1824,1722],{},[22,1826,1827,1830,1833],{},[25,1828,1829],{},"Downgrade to General Purpose",[25,1831,1832],{},"Typical savings: 60% (2.5x price difference)",[25,1834,1835],{},"Risk: Medium (verify latency tolerance)",[14,1837,1839],{"id":1838},"troubleshooting","Troubleshooting",[55,1841,1843],{"id":1842},"recommendation-concerns","Recommendation Concerns",[10,1845,1846],{},[28,1847,1848],{},"Q: Will downgrading impact performance?",[10,1850,1851],{},"A: Jetscale maintains 2-3x headroom above peak usage. We analyze:",[22,1853,1854,1857,1859,1861],{},[25,1855,1856],{},"P95 and P99 DTU\u002FvCore usage over 14 days",[25,1858,648],{},[25,1860,651],{},[25,1862,1863],{},"Historical spike patterns",[10,1865,1866],{},"Recommendations only proceed if performance risk is Low or Very Low.",[10,1868,1869],{},[28,1870,1871],{},"Q: What about serverless cold start delays?",[10,1873,1874],{},"A: Serverless databases resume in ~2 minutes from paused state. Best for:",[22,1876,1877,1880,1883,1886],{},[25,1878,1879],{},"Batch processing and reporting",[25,1881,1882],{},"Development and testing",[25,1884,1885],{},"Applications tolerant of occasional cold starts",[25,1887,1888],{},"Avoid for: Real-time APIs, always-on applications",[10,1890,1891],{},[28,1892,1893],{},"Q: Can I test before committing?",[10,1895,1896],{},"A: Yes! Apply changes to dev\u002Fstaging first:",[1557,1898,1899,1902,1905,1908,1911],{},[25,1900,1901],{},"Jetscale generates Terraform for all environments",[25,1903,1904],{},"Test in non-production for 48-72 hours",[25,1906,1907],{},"Monitor performance metrics",[25,1909,1910],{},"Rollback if needed (simple tier change)",[25,1912,1913],{},"Apply to production once validated",[55,1915,1917],{"id":1916},"performance-issues-after-optimization","Performance Issues After Optimization",[10,1919,1920],{},[28,1921,1922],{},"Symptom: Increased query latency",[10,1924,1925],{},"Possible causes:",[22,1927,1928,1931,1934],{},[25,1929,1930],{},"Insufficient DTU\u002FvCore capacity",[25,1932,1933],{},"Storage I\u002FO throttling",[25,1935,1936],{},"Connection pool exhaustion",[10,1938,1939],{},[28,1940,1941],{},"Resolution:",[1557,1943,1944,1953,1956,1959],{},[25,1945,1946,1947,1949,1950,1952],{},"Check ",[75,1948,512],{}," and ",[75,1951,518],{}," metrics",[25,1954,1955],{},"Review slow query logs",[25,1957,1958],{},"Increase tier\u002Fsize by one step if needed",[25,1960,1961],{},"Consider Query Performance Insights for optimization",[10,1963,1964],{},[28,1965,1966],{},"Symptom: Connection failures",[10,1968,1925],{},[22,1970,1971,1974,1977],{},[25,1972,1973],{},"Serverless database in paused state",[25,1975,1976],{},"Connection pool settings need adjustment",[25,1978,1979],{},"Resource limits exceeded",[10,1981,1982],{},[28,1983,1941],{},[1557,1985,1986,1989,1994,1997],{},[25,1987,1988],{},"If serverless: Reduce auto-pause delay or switch to provisioned",[25,1990,1946,1991,1993],{},[75,1992,534],{}," metric",[25,1995,1996],{},"Review connection pool configuration",[25,1998,1999,2000,2002],{},"Monitor ",[75,2001,540],{}," for capacity",[14,2004,2006],{"id":2005},"security-considerations","Security Considerations",[55,2008,2010],{"id":2009},"encryption","Encryption",[10,2012,2013],{},"Jetscale recommendations preserve:",[22,2015,2016,2019,2022,2025],{},[25,2017,2018],{},"Transparent Data Encryption (TDE) settings",[25,2020,2021],{},"Always Encrypted configuration",[25,2023,2024],{},"SSL\u002FTLS connection requirements",[25,2026,2027],{},"Encryption at rest and in transit",[55,2029,2031],{"id":2030},"compliance","Compliance",[10,2033,2034],{},"Configuration changes maintain compliance:",[22,2036,2037,2040,2043,2046],{},[25,2038,2039],{},"Geo-replication settings preserved",[25,2041,2042],{},"Backup retention policies unchanged",[25,2044,2045],{},"Threat detection and auditing settings maintained",[25,2047,2048],{},"Virtual network rules and firewall rules preserved",[14,2050,2052],{"id":2051},"limitations","Limitations",[10,2054,2055],{},[28,2056,2057],{},"Not Currently Supported:",[22,2059,2060,2063,2066,2069],{},[25,2061,2062],{},"Reserved capacity purchase recommendations",[25,2064,2065],{},"Cross-region replication optimization",[25,2067,2068],{},"Backup retention policy optimization",[25,2070,2071],{},"Index and query tuning recommendations",[10,2073,2074,2077],{},[28,2075,2076],{},"Roadmap:","\nThese features are planned for future releases. Currently, Jetscale focuses on service tier and compute optimization.",[14,2079,2081],{"id":2080},"api-integration","API Integration",[10,2083,2084],{},"Jetscale provides API access for programmatic optimization:",[68,2086,2090],{"className":2087,"code":2088,"language":2089,"meta":77,"style":77},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# List Azure SQL recommendations\nGET \u002Fapi\u002Fv1\u002Frecommendations?resource_type=azure-sql\n\n# Get specific recommendation details\nGET \u002Fapi\u002Fv1\u002Frecommendations\u002F{recommendation_id}\n\n# Approve recommendation (generates Terraform)\nPOST \u002Fapi\u002Fv1\u002Frecommendations\u002F{recommendation_id}\u002Fapprove\n\n# Retrieve generated Terraform\nGET \u002Fapi\u002Fv1\u002Frecommendations\u002F{recommendation_id}\u002Fterraform\n","bash",[75,2091,2092,2098,2108,2112,2117,2124,2128,2133,2141,2145,2150],{"__ignoreMap":77},[809,2093,2094],{"class":811,"line":812},[809,2095,2097],{"class":2096},"sHwdD","# List Azure SQL recommendations\n",[809,2099,2100,2104],{"class":811,"line":818},[809,2101,2103],{"class":2102},"sBMFI","GET",[809,2105,2107],{"class":2106},"sfazB"," \u002Fapi\u002Fv1\u002Frecommendations?resource_type=azure-sql\n",[809,2109,2110],{"class":811,"line":824},[809,2111,834],{"emptyLinePlaceholder":833},[809,2113,2114],{"class":811,"line":830},[809,2115,2116],{"class":2096},"# Get specific recommendation details\n",[809,2118,2119,2121],{"class":811,"line":837},[809,2120,2103],{"class":2102},[809,2122,2123],{"class":2106}," \u002Fapi\u002Fv1\u002Frecommendations\u002F{recommendation_id}\n",[809,2125,2126],{"class":811,"line":843},[809,2127,834],{"emptyLinePlaceholder":833},[809,2129,2130],{"class":811,"line":849},[809,2131,2132],{"class":2096},"# Approve recommendation (generates Terraform)\n",[809,2134,2135,2138],{"class":811,"line":855},[809,2136,2137],{"class":2102},"POST",[809,2139,2140],{"class":2106}," \u002Fapi\u002Fv1\u002Frecommendations\u002F{recommendation_id}\u002Fapprove\n",[809,2142,2143],{"class":811,"line":860},[809,2144,834],{"emptyLinePlaceholder":833},[809,2146,2147],{"class":811,"line":866},[809,2148,2149],{"class":2096},"# Retrieve generated Terraform\n",[809,2151,2152,2154],{"class":811,"line":872},[809,2153,2103],{"class":2102},[809,2155,2156],{"class":2106}," \u002Fapi\u002Fv1\u002Frecommendations\u002F{recommendation_id}\u002Fterraform\n",[10,2158,2159,2160,2165],{},"See our ",[2161,2162,2164],"a",{"href":2163},"\u002Fdocs\u002Fapi-reference","API Documentation"," for complete reference.",[14,2167,2169],{"id":2168},"support","Support",[10,2171,2172],{},"Need help with Azure SQL optimization?",[22,2174,2175,2185,2194],{},[25,2176,2177,2180,2181],{},[28,2178,2179],{},"Email",": ",[2161,2182,2184],{"href":2183},"mailto:support@jetscale.ai","support@jetscale.ai",[25,2186,2187,2180,2190],{},[28,2188,2189],{},"Documentation",[2161,2191,2193],{"href":2192},"\u002Fdocs\u002Ffaq","FAQ",[25,2195,2196,2180,2199],{},[28,2197,2198],{},"GitHub Issues",[2161,2200,2204],{"href":2201,"rel":2202},"https:\u002F\u002Fgithub.com\u002FJetscale-ai\u002Fjetscale-docs\u002Fissues",[2203],"nofollow","Report a problem",[2206,2207],"hr",{},[10,2209,2210],{},[28,2211,2212],{},"Related Documentation:",[22,2214,2215,2221],{},[25,2216,2217],{},[2161,2218,2220],{"href":2219},"\u002Fdocs\u002Fservices\u002Fazure-vm","Azure VM Optimization",[25,2222,2223],{},[2161,2224,2226],{"href":2225},"\u002Fdocs\u002Fservices\u002Frds","RDS Optimization",[2228,2229,2230],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"title":77,"searchDepth":818,"depth":818,"links":2232},[2233,2234,2239,2244,2250,2255,2261,2265,2269,2270,2271],{"id":16,"depth":818,"text":17},{"id":52,"depth":818,"text":53,"children":2235},[2236,2237,2238],{"id":57,"depth":824,"text":58},{"id":111,"depth":824,"text":112},{"id":152,"depth":824,"text":153},{"id":192,"depth":818,"text":193,"children":2240},[2241,2242,2243],{"id":196,"depth":824,"text":197},{"id":301,"depth":824,"text":302},{"id":426,"depth":824,"text":427},{"id":491,"depth":818,"text":492,"children":2245},[2246,2247,2248,2249],{"id":495,"depth":824,"text":496},{"id":615,"depth":824,"text":616},{"id":698,"depth":824,"text":699},{"id":791,"depth":824,"text":792},{"id":1547,"depth":818,"text":1548,"children":2251},[2252,2253,2254],{"id":1551,"depth":824,"text":1552},{"id":1618,"depth":824,"text":1619},{"id":1660,"depth":824,"text":1661},{"id":1696,"depth":818,"text":1697,"children":2256},[2257,2258,2259,2260],{"id":1700,"depth":824,"text":1701},{"id":1736,"depth":824,"text":1737},{"id":1770,"depth":824,"text":1771},{"id":1804,"depth":824,"text":1805},{"id":1838,"depth":818,"text":1839,"children":2262},[2263,2264],{"id":1842,"depth":824,"text":1843},{"id":1916,"depth":824,"text":1917},{"id":2005,"depth":818,"text":2006,"children":2266},[2267,2268],{"id":2009,"depth":824,"text":2010},{"id":2030,"depth":824,"text":2031},{"id":2051,"depth":818,"text":2052},{"id":2080,"depth":818,"text":2081},{"id":2168,"depth":818,"text":2169},[2273,2274,2275],"optimization-methodology","provider-service-support","savings-methodology","Jetscale provides AI-powered cost optimization for Azure SQL Database, including single databases, elastic pools, and Azure SQL Managed Instance. Our specialized agents analyze...","md","en",{},[],"Cloud Optimization","\u002Fdocs\u002Fservices\u002Fazure-sql","legacy-import",{"title":5,"description":2276},[],"docs\u002F5.services\u002F7.azure-sql","high","services\u002Fazure-sql","-ukiemwd8swsrU59YMd_nJtVhKw9GmwqktFGJN27O1U",[2291],{"title":2292,"path":2293,"stem":2294,"children":2295},"Docs","\u002Fdocs","docs",[2296,2299,2303,2307,2311,2315,2337,2341,2372,2376,2379],{"title":2297,"path":2293,"stem":2298},"Jetscale Documentation","docs\u002Findex",{"title":2300,"path":2301,"stem":2302},"Getting Started with Jetscale","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started",{"title":2304,"path":2305,"stem":2306},"AWS Setup Guide","\u002Fdocs\u002Faws-setup","docs\u002F2.aws-setup",{"title":2308,"path":2309,"stem":2310},"Azure Setup Guide","\u002Fdocs\u002Fazure-setup","docs\u002F3.azure-setup",{"title":2312,"path":2313,"stem":2314},"How Jetscale Works","\u002Fdocs\u002Fhow-it-works","docs\u002F4.how-it-works",{"title":2316,"path":2317,"stem":2318,"children":2319},"Integrations","\u002Fdocs\u002Fintegrations","docs\u002F4.integrations\u002Findex",[2320,2321,2325,2329,2333],{"title":2316,"path":2317,"stem":2318},{"title":2322,"path":2323,"stem":2324},"GitHub Integration","\u002Fdocs\u002Fintegrations\u002Fgithub","docs\u002F4.integrations\u002F1.github",{"title":2326,"path":2327,"stem":2328},"Jira Integration","\u002Fdocs\u002Fintegrations\u002Fjira","docs\u002F4.integrations\u002F2.jira",{"title":2330,"path":2331,"stem":2332},"Slack Integration","\u002Fdocs\u002Fintegrations\u002Fslack","docs\u002F4.integrations\u002F3.slack",{"title":2334,"path":2335,"stem":2336},"Bitbucket Integration","\u002Fdocs\u002Fintegrations\u002Fbitbucket","docs\u002F4.integrations\u002F4.bitbucket",{"title":2338,"path":2339,"stem":2340},"AI-Powered Analysis","\u002Fdocs\u002Fai-analysis","docs\u002F5.ai-analysis",{"title":2342,"path":2343,"stem":2344,"children":2345},"Supported Services","\u002Fdocs\u002Fservices","docs\u002F5.services\u002Findex",[2346,2347,2351,2355,2359,2363,2365,2369,2370],{"title":2342,"path":2343,"stem":2344},{"title":2348,"path":2349,"stem":2350},"EBS Optimization","\u002Fdocs\u002Fservices\u002Febs","docs\u002F5.services\u002F1.ebs",{"title":2352,"path":2353,"stem":2354},"EC2 Optimization","\u002Fdocs\u002Fservices\u002Fec2","docs\u002F5.services\u002F2.ec2",{"title":2356,"path":2357,"stem":2358},"EKS Optimization","\u002Fdocs\u002Fservices\u002Feks","docs\u002F5.services\u002F3.eks",{"title":2360,"path":2361,"stem":2362},"ElastiCache Optimization","\u002Fdocs\u002Fservices\u002Felasticache","docs\u002F5.services\u002F4.elasticache",{"title":2226,"path":2225,"stem":2364},"docs\u002F5.services\u002F5.rds",{"title":2366,"path":2367,"stem":2368},"S3 Optimization","\u002Fdocs\u002Fservices\u002Fs3","docs\u002F5.services\u002F6.s3",{"title":5,"path":2282,"stem":2286},{"title":2220,"path":2219,"stem":2371},"docs\u002F5.services\u002F8.azure-vm",{"title":2373,"path":2374,"stem":2375},"Recommendation Workflow","\u002Fdocs\u002Frecommendation-workflow","docs\u002F6.recommendation-workflow",{"title":2377,"path":2163,"stem":2378},"API Reference","docs\u002F7.api-reference",{"title":2193,"path":2192,"stem":2380},"docs\u002F8.faq",[2382,2384],{"title":2366,"path":2367,"stem":2368,"description":2383,"children":-1},"Jetscale provides AI-powered cost optimization for Amazon S3 buckets. Our specialized agents analyze your storage workloads to identify tiering opportunities, lifecycle policy...",{"title":2220,"path":2219,"stem":2371,"description":2385,"children":-1},"Jetscale provides AI-powered cost optimization for Azure Virtual Machines. Our specialized agents analyze your compute workloads to identify right-sizing opportunities, VM...",1788204004610]