Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Dokuda SQL Veritabanı
Azure SQL Veritabanı, Microsoft Fabric'teki SQL veritabanı veya Azure SQL Yönetilen Örneği bağlantısı başarısız olduğunda hata iletileri alırsınız.
Her zaman olduğu gibi, uygulama tasarım işlemi sırasında en iyi yöntemleri ve tasarım yönergelerini uygulayın.
Not
Çok çeşitli bağlantı hatalarını algılamak ve düzeltmek için Azure SQL Bağlantı Denetleyicisi'ni kullanabilirsiniz.
Yaygın bağlantı sorunlarını giderme adımları
TCP/IP'nin uygulama sunucusunda istemci protokolü olarak etkinleştirildiğinden emin olun. SQL araçlarının yüklü olmadığı uygulama sunucularında, cliconfg.exe (SQL Server İstemci Ağı yardımcı programı) çalıştırarak TCP/IP'nin etkinleştirildiğini doğrulayın.
Doğru yapılandırıldığından emin olmak için uygulamanın bağlantı dizesi denetleyin. Örneğin, bağlantı dizesinin doğru bağlantı noktası (1433) ve doğru tam sunucu adını belirttiğinden emin olun. Bkz. SQL Server Management Studio kullanarak bağlantı bilgilerini alma.
Bağlantı zaman aşımı değerini artırmayı deneyin. En az 30 saniyelik bir bağlantı zaman aşımı kullanmanızı öneririz.
Hızlı Başlangıç:Azure SQL Veritabanı veya Azure SQL Yönetilen Örneği, UDL dosyası, ping veya telnet'e bağlanmak ve sorgulamak için SSMS'yi kullanarak uygulama sunucusu ile Azure SQL Veritabanı arasındaki bağlantıyı test edin. Daha fazla bilgi için bkz. Bağlantı sorunlarını giderme ve Bağlantı sorunları için tanılama.
Not
Sorun giderme adımı olarak, bağlantıyı farklı bir istemci bilgisayarda da test edebilirsiniz.
En iyi uygulama olarak buluta bağlı uygulamaların yeniden deneme mantığını kullanması gerekir.
Bu adımlar sorununuzu çözmezse daha fazla veri toplamayı deneyin ve ardından desteğe başvurun. Uygulamanız bir bulut hizmetiyse günlüğe kaydetmeyi etkinleştirin. Bu adım, hatanın UTC zaman damgasını döndürür. Günlüğe kaydetmeyi etkinleştirme hakkında daha fazla bilgi için bkz. Azure Uygulama Hizmeti'nde uygulamalar için tanılama günlüğünü etkinleştirme. Ayrıca, SQL Veritabanı izleme kimliğini döndürür. Microsoft Müşteri Destek Hizmetleri bu bilgileri kullanabilir.
Özel DNS veya hosts dosyası geçersiz kılmalarının neden olduğu bağlantı hataları
Uygulamanızın Azure SQL hizmeti iyi durumdayken belirli istemci ağlarına yalıtılmış kalıcı oturum açma hataları (hata 18456, 40532 veya 40615) varsa, bunun nedeni sunucu FQDN'sini eski bir Azure SQL ağ geçidi IP'sine sabitleyen özel bir DNS yapılandırması olabilir.
Bu neden olur?
Azure SQL Veritabanı bölgesel ağ geçitlerinden oluşan bir filo kullanır. Azure, donanım yenileme, ölçeklendirme ve sistem durumu temelli geçiş gibi normal işlemlerin bir parçası olarak ağ geçitlerini düzenli aralıklarla kullanımdan kaldırıp değiştirir.
<server>.database.windows.net için Azure yetkili DNS, geçerli etkin ağ geçitlerini yansıtacak şekilde otomatik olarak güncelleştirilir.
Ortamınız bu DNS çözümlemesini geçersiz kıldığında (bir konak dosya girişi, statik bir CNAME kaydı veya sunucu FQDN'sini belirli bir IP'ye eşleyen özel bir DNS bölgesi aracılığıyla), istemci bu IP'ye sabitlenir. Bu IP'deki ağ geçidi daha sonra kullanımdan kaldırılırsa veya yeniden atanırsa, bağlantılar yanlış uç noktaya gider. Azure SQL ağ geçidi, gelen FQDN'yi hedef sunucuya karşı doğrular ve bir uyuşmazlık oturum açma hatalarına neden olur.
Önemli
Doğrudan bir IP adresine (veya DNS geçersiz kılma yoluyla eski bir IP'ye) giden oturum açma girişimleri tasarım gereği başarısız olur. Azure SQL ağ geçidi, bağlantıları istenen sunucuya yönlendirmek için doğru FQDN gerektirir.
DNS aşımını algılama
Etkilenen istemciden aşağıdaki denetimleri çalıştırın.
Yerel hosts dosyasını geçersiz kılmalar için denetleyin.
:: Windows type C:\Windows\System32\drivers\etc\hosts | findstr /i "database.windows.net"# Linux or macOS grep -i "database.windows.net" /etc/hostsİstemci DNS çözümlemesi ile Azure yetkili DNS karşılaştırması:
:: Client or recursive resolver nslookup <server>.database.windows.net :: Authoritative public DNS nslookup <server>.database.windows.net 208.67.222.222# PowerShell Resolve-DnsName -Name "<server>.database.windows.net" -DnsOnlyİstemci çözümleyicisi, yetkili DNS'in döndürdüğünden farklı bir IP döndürürse, bir DNS geçersiz kılma işlemi etkindir.
CNAME veya özel DNS bölgesi geçersiz kılmalarını denetleyin:
nslookup -type=CNAME <server>.database.windows.netaz network private-dns record-set list \ --resource-group <ResourceGroup> \ --zone-name database.windows.net \ --output table
Geçersiz kılmayı düzeltme
Geçersiz kılmayı kaldırın. Konaklar dosya girdisini silin, statik CNAME kaydını kaldırın veya sunucu FQDN'sini belirli bir IP'ye sabitleyen özel DNS bölgesi kaydını silin.
İstemcide ve ara çözümleyicilerde DNS önbelleklerini temizleyin:
:: Windows ipconfig /flushdns# Linux (systemd-resolved) sudo systemd-resolve --flush-caches # macOS sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponderDNS'nin artık geçerli Azure ağ geçidine çözümlendiğini doğrulayın:
nslookup <server>.database.windows.netDöndürülen IP'nin sunucunuzun bölgesi için yayımlanan ağ geçidi IP aralıkları içinde olduğunu onaylayın. Liste için Bağlantı mimarisininAğ Geçidi IP adresleri bölümüne bakın.
Azure SQL Bağlantı Denetleyicisi veya SQL Server Management Studio (SSMS) kullanarak bağlantıyı yeniden test edin.
Bu sorunu önleyin
- Azure SQL sunucu FQDN'lerini hiçbir zaman konak dosyalarındaki, statik CNAME kayıtlarındaki veya özel DNS bölgelerindeki belirli IP adreslerine sabitleyin. Azure SQL ağ geçitleri dinamiktir ve zaman içinde değişir.
- Ağ geçidi IP'lerini temel alan güvenlik duvarı izin verme listeleri kullanıyorsanız, tek tek IP'ler yerine bölgeniz için tüm ağ geçidi IP aralıklarına izin verin. Mümkün olduğunda hizmet etiketini kullanın
Sql.<region>. - Özel bağlantı için DNS geçersiz kılmaları yerine Azure Özel Bağlantı veya özel uç noktaları kullanın. Özel uç noktalar sanal ağınızda kararlı özel IP'ler sağlar ve doğrudan ağ geçidine yönlendirilir.
- Bölgenizdeki ağ geçidi geçişleri hakkında bildirim almak üzere Azure SQL Veritabanı için Hizmet Durumu uyarılarına abone olun.
Hızlı referans
| Belirti | Olası neden | Düzelt |
|---|---|---|
| Hizmet durumu normalken belirli istemci ağlarına yalıtılmış oturum açma hataları (18456, 40532, 40615) | Konak dosyası veya statik CNAME, FQDN'yi kullanımdan kaldırılmış veya yanlış bir ağ geçidi IP'sine sabitler | Geçersiz kılmayı kaldırın, DNS'yi temizleyin, çözümlemeyi doğrulayın ve yeniden test edin. |
nslookup bölge için yayımlanan ağ geçidi aralıklarında olmayan bir IP döndürür |
DNS geçersiz kılma (konak dosyası, CNAME veya özel DNS bölgesi) etkin | Geçersiz kılma girdisini kaldırın ve DNS önbelleklerini temizleyin. |
| Bağlantılar bazı ağlardan çalışır ancak diğer ağlardan başarısız olur | Yalnızca geçersiz kılmaya sahip ağ eski IP'ye sabitlenir | Başarısız olan ve çalışan ağlardaki DNS çözümlemesini karşılaştırın ve başarısız ağ üzerindeki geçersiz kılmayı kaldırın. |
| Azure ağ geçidi geçiş bildirimi sonrasında bağlantı başarısız oluyor | Statik DNS eşlemesi hala devre dışı bırakılmış ağ geçidine işaret ediyor. | Statik eşlemeyi kaldırın ve bölge için tüm ağ geçidi IP aralıklarına izin verin. |
Cannot open server veya server not found yapılandırma değişikliği yapılmadıktan sonra |
Ağ geçidi döndürme, DNS'de sabit kodlanmış IP'yi kullanımdan kaldırmış | DNS geçersiz kılmasını kaldırın ve dinamik Azure yetkili çözümü kullanın. |
Yeniden deneme mantığını uygulama
İstemci uygulamalarınızın, geçici hata süresini düzeltdikten sonra bağlantıyı yeniden kurabilmesi için yeniden deneme mantığını kullanması kesinlikle önerilir. İlk yeniden denemenizden önce 5 saniye gecikmenizi öneririz. 5 saniyeden kısa bir gecikmeden sonra yeniden deneme, bulut hizmetini bunaltma riski taşır. Sonraki her yeniden denemede gecikme üstel olarak artarak en fazla 60 saniye olmalıdır.
Yeniden deneme mantığının kod örnekleri için bkz:
Uygulamanızdaki geçici hataları işleme hakkında daha fazla bilgi için Geçici bağlantı hatalarını giderme makalesini gözden geçirin.
ADO.NET kullanan istemciler için engelleme süresi tartışması, Bağlantı Havuzu (ADO.NET) bölümünde bulunmaktadır.
Geçici hata hata iletileri (40197, 40613 ve diğerleri)
Azure altyapısının SQL Veritabanı hizmetinde ağır iş yükleri ortaya çıktığında sunucuları dinamik olarak yeniden yapılandırabilme özelliği vardır. Bu dinamik davranış istemci programınızın veritabanı veya örnek bağlantısını kaybetmesine neden olabilir. Bu tür bir hata koşulu geçici hata olarak adlandırılır. Veritabanı yeniden yapılandırma olayları, planlı bir olay (örneğin, yazılım yükseltmesi) veya planlanmamış bir olay (örneğin, işlem kilitlenmesi veya yük dengeleme) nedeniyle oluşur. Çoğu yeniden yapılandırma olayı kısa sürelidir ve en fazla 60 saniyeden kısa sürede tamamlanmalıdır. Ancak, büyük bir işlemin uzun süre çalışan bir kurtarma işlemine neden olması gibi bu olayların tamamlanması zaman zaman daha uzun sürebilir. Aşağıdaki tabloda, uygulamaların Azure SQL Veritabanı bağlanırken alabileceği çeşitli geçici hatalar listelenmiştir.
Geçici hata hata kodlarının listesi
| Hata kodu | Önem Derecesi | Açıklama |
|---|---|---|
926 |
14 | Database 'replicatedmaster' cannot be opened. It has been marked SUSPECT by recovery. See the SQL Server error log for more information.Bu hata, eski birincilin günlüğü kapandığında, yeniden yapılandırmanın son aşamasında, kısa bir süreliğine SQL Yönetilen Örneği hata günlüğüne kaydedilebilir. Bu hata iletisini içeren diğer, geçici olmayan senaryolar MSSQL Hataları belgelerinde açıklanmıştır. |
4060 |
16 | Cannot open database "%.*ls" requested by the login. The login failed. Daha fazla bilgi için bkz . Hatalar 4000 - 4999 |
40197 |
17 | The service has encountered an error processing your request. Please try again. Error code %d.Yazılım veya donanım yükseltmeleri, donanım hataları veya diğer yük devretme sorunları nedeniyle hizmet devre dışı olduğunda bu hatayı alırsınız. 40197 hata mesajına gömülü hata kodu %d, meydana gelen hata veya başarısızlık türü hakkında ek bilgi sağlar. Hata kodlarının bazı örnekleri 40197 hata iletisine eklenir: 40020, 40143, 40166 ve 40540. Yeniden bağlanmak sizi otomatik olarak veritabanınızın iyi durumdaki bir kopyasına bağlar. Uygulamanız 40197 hatasını yakalamalı, ekli hata kodunu (%d) sorun giderme amacıyla iletinin içinde günlüğe kaydetmeli ve SQL Veritabanı'na bağlanmaya, kaynaklar kullanılabilir hale gelene ve bağlantı yeniden kurulana kadar devam etmelidir. Daha fazla bilgi için bkz. Geçici hatalar. |
40501 |
20 | The service is currently busy. Retry the request after 10 seconds. Incident ID: %ls. Code: %d. Daha fazla bilgi için, şuraya bakın: • Kaynak yönetimi. • DTU satın alma modelini kullanan elastik havuzlar için kaynak sınırları. • Tek veritabanları için sanal çekirdek tabanlı sınırlar. • Elastik havuzlar için sanal çekirdek tabanlı sınırlar. • Azure SQL Yönetilen Örneği kaynak sınırları. |
40613 |
17 | Database '%.*ls' on server '%.*ls' is not currently available. Please retry the connection later. If the problem persists, contact customer support, and provide them with the session tracing ID of '%.*ls'.Bu hata, veritabanında zaten bir ayrılmış yönetici bağlantısı (DAC) kuruluysa oluşabilir. Daha fazla bilgi için bkz. Geçici hatalar. |
49918 |
16 | Cannot process request. Not enough resources to process request. The service is currently busy. Please retry the request later.Daha fazla bilgi için, şuraya bakın: • Kaynak yönetimi. • DTU satın alma modelini kullanan elastik havuzlar için kaynak sınırları. • Tek veritabanları için vCore tabanlı sınırlar. • Elastik havuzlar için sanal çekirdek tabanlı sınırlar. • Azure SQL Yönetilen Örneği kaynak sınırları. |
49919 |
16 | Cannot process create or update request. Too many create or update operations in progress for subscription "%ld".Hizmet, aboneliğiniz veya sunucunuz için birden çok oluşturma veya güncelleştirme isteğini işlemekle meşgul. İstekler şu anda kaynak iyileştirme için engellenmiştir. Bekleyen işlemleri sorgulamak için sys.dm_operation_status sorgulayın. Bekleyen oluşturma veya güncelleştirme istekleri tamamlanana kadar bekleyin veya bekleyen isteklerinizden birini silin ve isteğinizi daha sonra yeniden deneyin. İşlemleriniz takılmış gibi görünüyorsa, devam eden diğer işlemlerin tamamlanmasını bekleyin veya mümkün olduğunda bunları iptal edin. Örneğin, oluşturulan veritabanını veya çoğaltmayı silerek veritabanı kopyasını veya coğrafi çoğaltma oluşturmayı iptal edebilirsiniz. Takılmış gibi görünen bir işlemi iptal edemezseniz Microsoft ile bir destek bileti açın. |
49920 |
16 | Cannot process request. Too many operations in progress for subscription "%ld".Hizmet, bu abonelik için birden çok isteği işlemekle meşgul. İstekler şu anda kaynak iyileştirme için engellenmiştir. İşlem durumu için sorgu sys.dm_operation_status . Bekleyen istekler tamamlanana kadar bekleyin veya bekleyen isteklerinizden birini silin ve isteğinizi daha sonra yeniden deneyin. İşlemleriniz takılmış gibi görünüyorsa, devam eden diğer işlemlerin tamamlanmasını bekleyin veya mümkün olduğunda bunları iptal edin. Örneğin, oluşturulan veritabanını veya çoğaltmayı silerek veritabanı kopyasını veya coğrafi çoğaltma oluşturmayı iptal edebilirsiniz. Takılmış gibi görünen bir işlemi iptal edemezseniz Microsoft ile bir destek bileti açın. |
4221 |
16 | Login to read-secondary failed due to long wait on 'HADR_DATABASE_WAIT_FOR_TRANSITION_TO_VERSIONING'.Replika, geri dönüştürüldüğü sırada yürütülmekte olan işlemler için satır sürümleri eksik olduğundan oturum açma için kullanılamaz. Sorun, birincil çoğaltmadaki etkin işlemler geri alınarak veya onaylanarak çözülebilir. Bu koşulun oluşumları, ana sunucuda uzun yazma işlemlerinden kaçınılarak azaltılabilir. |
615 |
21 | Could not find database ID %d, name '%.*ls'Bellek içi önbelleğin SQL server örneğiyle eşitlenmediği anlamına gelir ve bu nedenle aramalar eski veritabanı kimliğini geri getirir. SQL girişleri, veritabanı adını kimlikle eşleştirmek için bellek içi önbellek kullanır. Önbellek, arka plan veritabanıyla eşitlenmiş olmalı ve veritabanı SQL sunucu örneğine bağlandığında veya bağlantısı kaldırıldığında güncellenmelidir. Bellek içi önbelleğin ayırma iş akışında zamanında temizlenememesi ve bunun sonucunda veritabanındaki sonraki aramaların eski veya geçersiz veritabanı kimliğine yönlendirilmesi durumunda bu hatayı alırsınız. Kaynak kullanılabilir duruma gelene ve bağlantı yeniden kurulana kadar SQL Veritabanı yeniden bağlanmayı deneyin. Daha fazla bilgi için bkz. Geçici hatalar. |
Geçici bağlantı sorunlarını çözme adımları
- Uygulamanın rapor verdiği süre boyunca gerçekleşen bilinen kesintiler için Microsoft Azure Hizmet Panosu'na bakın.
- Azure SQL Veritabanı gibi bir bulut hizmetine bağlanan uygulamalar düzenli olarak yeniden yapılandırma olayları beklemelidir ve kullanıcılara uygulama hataları uygulamak yerine bu hataları işlemek için yeniden deneme mantığı uygulamalıdır.
- Veritabanı kaynak sınırlarına yaklaştıkça geçici bir bağlantı sorunu gibi görünebilir. Bkz. Kaynak sınırları.
- Bağlantı sorunları devam ederse veya uygulamanızın hatayla karşılaşma süresi 60 saniyeyi aşıyorsa veya belirli bir gün içinde hatanın birden çok tekrarını görürseniz Azure Destek sitesinde Destek Al'ı seçerek Azure desteği isteği gönderin.
Sunucunuzla bağlantı kurulurken ağ ile ilgili veya örneğe özgü bir hata oluştu
Uygulama sunucuya bağlanamıyorsa sorun oluşur.
Bu sorunu çözmek için Yaygın bağlantı sorunlarını düzeltme adımları bölümündeki adımları (sunulan sırayla) deneyin.
Sunucu/örnek bulunamadı veya erişilebilir değil (hata 26, 40, 10053)
Hata 26: Belirtilen sunucu bulma hatası
System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections.(provider: SQL Network Interfaces, error: 26 – Error Locating Server/Instance Specified)
Hata 40: Sunucu bağlantısı açılamadı
A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)
Hata 10053: Sunucudan sonuçlar alınırken aktarım düzeyi hatası oluştu
10053: A transport-level error has occurred when receiving results from the server. (Provider: TCP Provider, error: 0 - An established connection was aborted by the software in your host machine)
Uygulama sunucuya bağlanamıyorsa bu sorunlar oluşur.
Bu sorunları çözmek için Yaygın bağlantı sorunlarını düzeltme adımları bölümündeki adımları (sunulan sırayla) deneyin.
Güvenlik duvarı sorunları nedeniyle sunucuya bağlanılamıyor
Hata 40615: Sunucu adına bağlanılamıyor <>
Bu sorunu çözmek için Azure portalı aracılığıyla SQL Veritabanı güvenlik duvarı ayarlarını yapılandırın.
Hata 5: Sunucu adına bağlanılamıyor <>
Bu sorunu çözmek için, istemci ile internet arasındaki tüm güvenlik duvarlarında giden bağlantılar için 1433 numaralı bağlantı noktasının açık olduğundan emin olun.
Sunucuda oturum açılamıyor (hatalar 18456, 40531)
'Kullanıcı adı<'> kullanıcısı için oturum açılamadı
Login failed for user '<User name>'.This session has been assigned a tracing ID of '<Tracing ID>'. Provide this tracing ID to customer support when you need assistance. (Microsoft SQL Server, Error: 18456)
Bu sorunu çözmek için hizmet yöneticinize başvurarak size geçerli bir kullanıcı adı ve parola sağlayın.
Hizmet yöneticisi genellikle oturum açma kimlik bilgilerini eklemek için aşağıdaki adımları kullanabilir:
SQL Server Management Studio (SSMS) kullanarak sunucuda oturum açın.
Oturum açma adının devre dışı bırakılıp bırakılmadığını denetlemek için veritabanında aşağıdaki SQL sorgusunu
masterçalıştırın:SELECT name, is_disabled FROM sys.sql_logins;Karşılık gelen ad devre dışı bırakılırsa, aşağıdaki ifadeyi kullanarak etkinleştirmeye karar verebilirsiniz:
ALTER LOGIN <User name> ENABLE;SQL oturum açma kullanıcı adı yoksa, yeni bir SQL oturumu oluşturmak için aşağıdaki SQL sorgusunu düzenleyin ve çalıştırın:
CREATE LOGIN <SQL_login_name, sysname, login_name> WITH PASSWORD = '<password, sysname, Change_Password>'; GOSSMS Nesne Gezgini Veritabanları'yı genişletin.
Kullanıcıya izin vermek istediğiniz veritabanını seçin.
Güvenlik'e sağ tıklayın ve ardından Yeni, Kullanıcı'yı seçin.
Yer tutucuları içeren oluşturulmuş betikte, adımları izleyip SSMS şablon parametrelerini değiştirin ve çalıştırın, örneğin:
CREATE USER [<user_name, sysname, user_name>] FOR LOGIN [<login_name, sysname, login_name>] WITH DEFAULT_SCHEMA = [<default_schema, sysname, dbo>]; GO -- Add user to the database owner role EXEC sp_addrolemember N'db_owner', N'<user_name, sysname, user_name>'; GOBelirli kullanıcıları belirli veritabanı rolleriyle eşlemek için de kullanabilirsiniz
sp_addrolemember.Not
Azure SQL Veritabanı'nda, veritabanı rol üyeliğini yönetmek için ALTER ROLE söz diziminin daha yeni halini göz önünde bulundurun.
Daha fazla bilgi için bkz . Veritabanı erişimini yetkilendirme.
Bağlantı zaman aşımı süresi doldu hataları
System.Data.SqlClient.SqlException (0x80131904): Bağlantı Zaman Aşımı Süresi Doldu
System.Data.SqlClient.SqlException (0x80131904): Connection Timeout Expired. The timeout period elapsed while attempting to consume the pre-login handshake acknowledgement. This could be because the pre-login handshake failed or the server was unable to respond back in time. The duration spent while attempting to connect to this server was - [Pre-Login] initialization=3; handshake=29995;
System.Data.SqlClient.SqlException (0x80131904): Zaman aşımı süresi doldu
System.Data.SqlClient.SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
System.Data.Entity.Core.EntityException: Alttaki sağlayıcı Open işleminde başarısız oldu
System.Data.Entity.Core.EntityException: The underlying provider failed on Open. -> System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. -> System.ComponentModel.Win32Exception: The wait operation timed out
Sunucu < adı > ile bağlanılamıyor
Cannot connect to <server name>.ADDITIONAL INFORMATION:Connection Timeout Expired. The timeout period elapsed during the post-login phase. The connection could have timed out while waiting for server to complete the login process and respond; Or it could have timed out while attempting to create multiple active connections. The duration spent while attempting to connect to this server was - [Pre-Login] initialization=231; handshake=983; [Login] initialization=0; authentication=0; [Post-Login] complete=13000; (Microsoft SQL Server, Error: -2) For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=-2&LinkId=20476 The wait operation timed out
Bu özel durumlar, bağlantı veya sorgu sorunları nedeniyle oluşabilir. Bağlantı sorunlarının bu hataya neden olduğunu onaylamak için bkz . Bağlantı sorunundan kaynaklanan bir hata olup olmadığını onaylama.
Uygulama sunucuya bağlanamadığı için bağlantı zaman aşımları oluşur. Bu sorunu çözmek için Yaygın bağlantı sorunlarını düzeltme adımları bölümündeki adımları (sunulan sırayla) deneyin.
Özel Uç Nokta bağlantı hatalarını giderme
Özel uç nokta üzerinden Azure SQL Veritabanı bağlantıları, bağlantı zaman aşımları veya oturum açma öncesi el sıkışma hatalarıyla başarısız olabilir. Aşağıdaki adımları sırayla uygulayın. Her adım ayrı bir hata modunu çözer.
1. Adım: Özel uç noktayı ve DNS çözümlemesini doğrulama
Özel uç noktanın sağlandığını ve DNS'nin özel IP'ye çözümlendiğini onaylayın.
| Denetle | Nasıl? |
|---|---|
| Özel uç nokta bağlantı durumu Onaylandı | Azure portalında SQL sunucunuza gidin ve ardından Networking>Private access. |
| Özel IP ayrılmış | Özel uç nokta kaynağını açın ve Genel Bakış sayfasında IP'yi not edin (örneğin, 10.0.1.4). |
| DNS, özel IP'ye çözümleniyor |
nslookup <server>.database.windows.net'i çalıştırın. Sonuç için CNAME zincirini <server>.privatelink.database.windows.net izlemesi ve özel IP'ye çözümlenmesi gerekir. Bunun yerine genel IP'yi görürseniz, özel DNS bölgesini veya koşullu iletme kurallarınızı denetleyin privatelink.database.windows.net . |
2. Adım: Çıkış IP'niz için sunucu düzeyinde güvenlik duvarı kuralı ekleme
Özel uç noktayla bile Azure SQL Veritabanı ağ geçidinin gördüğü kaynak IP'ye karşı sunucu düzeyinde IP güvenlik duvarı kurallarını zorunlu tutar.
Çıkış IP'nizi tanımlayın. VPN ağ geçidi veya ExpressRoute üzerinden yönlendirilen şirket içi trafik için çıkış IP'si genellikle sanal ağın içindeki ağ geçidi veya NAT özel IP'dir. Azure içinde, bu VM'nin özel IP'si veya bir yük dengeleyici ön uç IP'sidir.
Bu IP veya alt ağ için sunucu düzeyinde bir güvenlik duvarı kuralı ekleyin:
EXECUTE sp_set_firewall_rule @name = N'AllowPrivateEndpointSubnet', @start_ip_address = '10.0.1.0', @end_ip_address = '10.0.1.255';
Not
Azure hizmetleri ve kaynaklarının bu sunucuya erişimine izin ver seçeneği, özel bir uç nokta üzerinden kendi sanal ağınızdan gelen trafiği kapsamaz. Açık bir kural eklemeniz gerekir.
3. Adım: Ağ ucu veya şirket içi güvenlik duvarlarında doğru portları açma
Gerekli bağlantı noktaları bağlantı ilkesine bağlıdır:
| Bağlantı ilkesi | İzin verilen bağlantı noktaları | Notes |
|---|---|---|
| Redirect (Azure içinde varsayılan) |
1433
-
65535 (özel uç nokta sanal ağından gelen ve istemci sanal ağından giden) |
üzerinde 1433ilk el sıkışmadan sonra istemci daha yüksek aralıktaki bir bağlantı noktasına yönlendirilir. Yüksek bağlantı noktaları engellenirse, el sıkışması başarılı olduktan sonra yeniden yönlendirme sırasında zaman aşımına uğrar. |
| Proxy (varsayılan Azure dışında) |
1433 sadece |
Tüm trafik, 1433 numaralı port üzerinden ağ geçidi aracılığıyla akar. Güvenlik duvarı kuralları daha basittir, ancak gecikme süresi daha yüksektir. |
| Varsayılan | Yukarıdaki kuralları izler | Azure içinde bağlantı ilkesi Redirect şeklindedir. Azure dışında Proxy. |
Bir bağlantı sanal ağın içinden başarılı olursa ancak şirket içinden başarısız olursa, şirket içi güvenlik duvarı büyük olasılıkla aralığın 1433-65535 daha yüksek bağlantı noktalarını engelliyordur. Bu bağlantı noktası aralığını açın veya sunucunun bağlantı ilkesini Proxy olarak değiştirin. Daha fazla bilgi için bkz. Özel uç noktalarla yeniden yönlendirme bağlantı ilkesini kullanma.
4. Adım: UDR, NVA ve NAT senaryoları için simetrik yönlendirmeyi doğrulama
SQL özel uç noktasına giden trafik bir ağ sanal gereci (NVA), Azure Güvenlik Duvarı veya NAT ağ geçidinden geçerse, dönüş trafiği aynı yolu izlemelidir. Asimetrik yönlendirme TCP sıfırlamalarına veya sessiz paket düşüşlerine neden olur.
Önemli bilgiler:
Azure, her özel uç nokta IP'si için bir
/32sistem yolu oluşturur (örneğin,10.0.1.4/32ile sonraki atlama türüInterfaceEndpoints). Kullanıcı tanımlı bir yol (UDR), bu sistem yolunu yalnızca eşit veya daha belirli bir ön ekle (başka/32bir ) geçersiz kılabilir.Giden trafiği bir NVA'ya yönlendirirseniz, dönüş paketlerinin doğrudan istemciye gitmek yerine NVA'ya geri dönmesi için NVA'nın kaynak ağ adresi çevirisi (SNAT) uygulaması gerekir. SNAT olmadan dönüş yolu asimetriktir.
Özel uç nokta ağ ilkeleri (özel uç nokta alt ağında NSG ve UDR desteği) varsayılan olarak devre dışı bırakılır. Özel uç nokta trafiğine NSG veya UDR kuralları uygulamak için alt ağda ağ ilkelerini etkinleştirin:
az network vnet subnet update \ --name <SubnetName> \ --vnet-name <VNetName> \ --resource-group <ResourceGroup> \ --private-endpoint-network-policies Enabled
Bir bağlantı NVA olmadan çalışıyor ancak NVA üzerinden yönlendirildiğinde zaman aşımına uğruyorsa, /32 sistem yolu dönüş trafiğini doğrudan istemciye gönderir ve NVA durum tablosunu atlar. NVA'ya işaret eden özel uç nokta IP'sine bir /32 UDR ekleyin ve NVA'da SNAT'yi etkinleştirin.
5. Adım: Uçtan uca bağlantıyı onaylamak için Ağ İzleyicisi kullanma
Önceki adımlar doğru görünüyorsa ancak bağlantılar yine başarısız olursa, hatayı yalıtmak için Azure Ağ İzleyicisi kullanın:
| Araç | Size ne söyler? |
|---|---|
| Bağlantı sorunlarını giderme | VM'den <server>.database.windows.net:1433 TCP bağlantısını test eder ve bağlantının başarısız olduğu yeri raporlar (NSG, rota veya DNS). |
| Bir sonraki adım | Özel uç nokta IP'sine giden bir paketin izlediği yönlendirme tablosu girişini gösterir. Sistem yolunun /32 mu yoksa UDR'nizin mi etkin olduğunu onaylar. |
| Etkili yollar | Özel uç noktaların sistem yolları (sonraki atlama türü InterfaceEndpoints) dahil olmak üzere VM NIC için birleştirilmiş yol tablosunu görüntüler. |
Hızlı referans
| Belirti | Olası neden | Düzelt |
|---|---|---|
nslookup genel IP'yi verir |
DNS bölgesi veya koşullu iletme yanlış yapılandırılmış | Özel DNS bölgesini privatelink.database.windows.net oluşturun veya bağlayın ve koşullu ileticiyi doğrulayın. |
Cannot open server "bulunamadı veya erişilebilir değil" |
Çıkış IP'sinde sunucu düzeyinde bir güvenlik duvarı kuralı eksik | Portalda veya sp_set_firewall_rule ile kaynak IP için bir güvenlik duvarı kuralı ekleyin. |
| El sıkışma başarılı olur, sonra zaman aşımına uğrar | Daha yüksek bağlantı noktalarını yeniden yönlendirme (yukarı 1433, yukarı 65535) şirket içi güvenlik duvarı tarafından engellenir |
Aralığın tamamını 1433-65535 açın veya bağlantı ilkesini Proxy'ye değiştirin. |
| Bağlantı NVA olmadan çalışır ancak bir NVA ile zaman aşımına uğrar. | Asimetrik yönlendirme. NVA SNAT kullanmıyor veya /32 UDR geçersiz kılması eksik |
NVA'ya işaret eden bir /32 UDR ekleyin, NVA'da SNAT'yi etkinleştirin ve özel uç nokta ağ ilkelerini etkinleştirin. |
| Aralıklı TCP sıfırlamaları | Özel uç nokta alt ağı üzerinde NSG dönüş trafiğini engeller veya özel uç nokta ağ ilkeleri etkin değil. | Özel uç nokta ağ ilkelerini etkinleştirin ve NSG kurallarını gözden geçirin. |
Ağ bağlantısı sonlandırma hataları
SQL istemci kitaplıkları, TCP ağ protokolünü kullanarak Azure SQL Veritabanı ve Azure SQL Yönetilen Örneğine bağlanır. İstemci kitaplığı, TCP bağlantılarını yönetmek için TCP sağlayıcısı adlı daha düşük düzeyli bir bileşen kullanır. TCP sağlayıcısı uzak bir konağın var olan bir TCP bağlantısını beklenmedik bir şekilde sonlandırdığını algıladığında, istemci kitaplığı bir hata oluşturur. Hata sql sunucusu hatası değil istemci hatası olduğundan sql hata numarası eklenmez. Bunun yerine, hata numarası 0'dır ve TCP sağlayıcısından gelen hata iletisi kullanılır.
Ağ bağlantısı sonlandırma hatalarının örnekleri şunlardır:
A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.) An existing connection was forcibly closed by the remote host
A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)
The client was unable to establish a connection because of an error during connection initialization process before login. Possible causes include the following: the client tried to connect to an unsupported version of SQL Server; the server was too busy to accept new connections; or there was a resource limitation (insufficient memory or maximum allowed connections) on the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)
A connection was successfully established with the server, but then an error occurred during the login process. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)
Veritabanı veya elastik havuz geçici olarak kullanılamadığından bağlantı sonlandırma hataları oluşabilir. Bunlar veritabanı sunucusu ile istemci uygulaması arasındaki ağ altyapısında güvenlik duvarları, ağ gereçleri vb. çeşitli sorunlar nedeniyle de oluşur. Bu sorunlar geçici veya kalıcı olabilir. Genel bir kılavuz olarak, uygulamalar kalıcı hataları dikkate almadan önce bu hatalar için sabit sayıda yeniden deneme denemesi kullanmalıdır.
Kaynak idaresi hataları
Azure SQL Veritabanı, kaynak sınırlarını zorlamak için Resource Governor'a dayalı bir kaynak yönetimi uygulaması kullanır. Azure SQL Veritabanı'da kaynak yönetimi hakkında daha fazla bilgi edinin.
En yaygın kaynak idaresi hataları önce ayrıntılarla birlikte listelenir ve ardından kaynak idaresi hata iletileri tablosu görüntülenir.
Hatalar 10928 ve 10936: Kaynak Kimliği: 1. [veritabanı veya elastik havuz] için istek sınırı %d'ye ulaşıldı.
Veritabanı düzeyi sınırına ulaşılırsa, bu örnekteki ayrıntılı hata iletisi şu şekildedir: Resource ID : 1. The request limit for the database is %d and has been reached. See 'http://go.microsoft.com/fwlink/?LinkId=267637' for assistance.
Elastik havuz sınırına ulaşılırsa, bu örnekte ayrıntılı hata iletisi şu şekildedir: Resource ID : 1. The request limit for the elastic pool is %d and has been reached. See 'http://go.microsoft.com/fwlink/?LinkId=267637' for assistance. Elastik havuz sınırları veritabanı sınırlarından daha yüksektir. Daha fazla bilgi için bkz. Azure SQL Veritabanı'nda kaynak yönetimi. Havuzdaki birden çok veritabanı aynı anda bir kaynak (çalışanlar gibi) kullandığında sınırlarla karşılaşılabilir.
Bu hata iletisi, veritabanı veya elastik havuz için çalışan sınırına ulaşıldığını gösterir. Veritabanı veya elastik havuzun hizmet hedefi için, %d yer tutucusu yerine en yüksek eşzamanlı çalışan sayısı değeri mevcut olacak.
Not
Azure SQL Veritabanı'nın ilk sürümü sadece tek iş parçacıklı sorguları destekledi. O sırada istek sayısı her zaman çalışan sayısına eşdeğerdi. Azure SQL Veritabanı hata iletileri 10928 ve 10936, geriye dönük uyumluluk amacıyla "İstek sınırı [...] N'ye ulaşıldı" ifadesini içerir. Ulaşılan sınır aslında çalışan sayısı sınırıdır. En yüksek paralellik derecesi (MAXDOP) ayarınız sıfıra eşitse veya birden büyükse, çalışan sayısı istek sayısından çok daha yüksek olabilir ve MAXDOP bire eşit olduğunda sınıra çok daha erken ulaşılabilir.
Oturumlar, çalışanlar ve istekler hakkında daha fazla bilgi edinin.
Gerekirse Ayrılmış Yönetici Bağlantısı (DAC) ile bağlanma
Çalışan sınırına ulaşıldığı canlı bir olay devam ediyorsa , SQL Server Management Studio (SSMS) kullanarak bağlandığınızda Hata 10928'i alabilirsiniz. Bir oturum, en fazla çalışan eşiğine ulaşıldığında bile Veritabanı Yöneticileri için Tanılama Bağlantısı'nı (DAC) kullanarak bağlanabilir.
SSMS'den DAC ile bağlantı kurmak için:
- Menüden Dosya > Yeni > Veritabanı Motoru Sorgusu seçin.
- Sunucu Adı alanındaki bağlantı iletişim kutusundan girin
admin:<fully_qualified_server_name>(örneğin,admin:servername.database.windows.net). - Seçenekler'i seçin >>
- Bağlantı Özellikleri sekmesini seçin
- Veritabanına bağlan: kutusuna veritabanınızın adını yazın
- Bağlan'ı seçin.
Hata 40613 alırsanız, bu başka Database '%.*ls' on server '%.*ls' is not currently available. Please retry the connection later. If the problem persists, contact customer support, and provide them the session tracing ID of '%.*ls'bir oturumun DAC'ye zaten bağlı olduğunu gösterebilir. Aynı anda tek bir veritabanı veya elastik havuz için DAC'ye yalnızca bir oturum bağlanabilir.
Bağlan'ı seçtikten sonra 'Sunucuya bağlanılamadı' hatasıyla karşılaşırsanız, 18.9'un önceki SSMS sürümlerini kullanıyorsanız DAC oturumu başarıyla oluşturulmuş olabilir. SSMS'nin ilk sürümleri, DAC bağlantıları için IntelliSense sağlamaya çalıştı. DAC yalnızca tek bir çalışanı desteklediğinden ve Intellisense ayrı bir çalışan gerektirdiğinden bu başarısız oldu.
SSMS'deki Nesne Gezgini ile DAC bağlantısı kullanamazsınız.
max_worker_percent kullanımınızı gözden geçirin
Veritabanınızın 14 günlük kaynak tüketimi istatistiklerini bulmak için sys.resource_stats sistem katalog görünümünü sorgulayın.
max_worker_percent sütunu, veritabanınızın çalışan sınırına göre kullanılan çalışan yüzdesini gösterir. Mantıksal sunucunuzdaki master veritabanına bağlanarak sys.resource_stats sorgulayın.
SELECT start_time, end_time, database_name, sku, avg_cpu_percent, max_worker_percent, max_session_percent
FROM sys.resource_stats;
Ayrıca, sys.dm_db_resource_stats dinamik yönetim görünümünden son saatteki kaynak tüketimi istatistiklerini sorgulayabilirsiniz. sorgulamak sys.dm_db_resource_statsiçin doğrudan veritabanınıza bağlanın.
SELECT end_time, avg_cpu_percent, max_worker_percent, max_session_percent
FROM sys.dm_db_resource_stats;
Mümkün olduğunda daha düşük çalışan kullanımı
Zincirlerin engellenmesi, veritabanındaki çalışan sayısında ani bir artışa neden olabilir. Çok fazla sayıda eşzamanlı paralel sorgu çok fazla sayıda çalışana neden olabilir. Maksimum paralellik derecenizi (MAXDOP) artırmak veya MAXDOP'yi sıfır olarak ayarlamak etkin çalışan sayısını artırabilir.
Yetersiz işçi bulunan bir olayı triye etmek için aşağıdaki adımları izleyin:
Engellemenin gerçekleşip gerçekleşmediğini veya çok fazla sayıda eşzamanlı çalışanı tanımlayabileceğinizi araştırın. Geçerli istekleri incelemek ve veritabanınız Hata 10928 döndürürken engelleme olup olmadığını denetlemek için aşağıdaki sorguyu çalıştırın. Sorguyu yürütmek için Ayrılmış Yönetici Bağlantısı'na (DAC) bağlanmanız gerekebilir.
SELECT r.session_id, r.request_id, r.blocking_session_id, r.start_time, r.status, r.command, DB_NAME(r.database_id) AS database_name, (SELECT COUNT(*) FROM sys.dm_os_tasks AS t WHERE t.session_id=r.session_id and t.request_id=r.request_id) AS worker_count, i.parameters, i.event_info AS input_buffer, r.last_wait_type, r.open_transaction_count, r.total_elapsed_time, r.cpu_time, r.logical_reads, r.writes, s.login_time, s.login_name, s.program_name, s.host_name FROM sys.dm_exec_requests as r JOIN sys.dm_exec_sessions as s on r.session_id=s.session_id OUTER APPLY sys.dm_exec_input_buffer (r.session_id,r.request_id) AS i WHERE s.is_user_process=1; GOEngellenen oturumları tanımlamak için
blocking_session_idsatırlarını arayın. Bu oturumun da engellenip engellenmediğini belirlemek için listedeki herblocking_session_idbir oturumu bulun.blocking_session_idvesession_iddeğerlerini takip ettikten sonra, sonunda sizi ana engelleyiciye yönlendirir: engellenmeyen ancak engelleyen bir oturum. Baş engelleyici sorgusunu ayarlayın.İpucu
Uzun süre çalışan veya engelleyen sorguları giderme hakkında daha ayrıntılı bilgi için bkz. Engelleme sorunlarını anlama ve çözme.
Çok fazla sayıda eş zamanlı çalışanı tanımlamak için, genel olarak istek sayısını ve her isteğin sütununu
worker_countgözden geçirin.Worker_countörneklenen zamandaki çalışan sayısıdır ve istek yürütüldükçe zaman içinde değişebilir. Çalışan sayısındaki artışın nedeni, en uygun paralellik derecelerinde işlemekte olan eşzamanlı sorgular ise, kaynak kullanımını azaltmak için sorgularınızı ayarlayın. Daha fazla bilgi için bkz. Sorgu Ayarlama/İpucu Sağlama.
Veritabanı için en yüksek paralellik derecesi (MAXDOP) ayarını değerlendirin.
Çalışan sınırlarını artırma
Veritabanı veya elastik havuz, kilitlenmeleri önleyici adımlar almanıza, sorguları optimize etmenize ve MAXDOP ayarınızı doğrulamanıza rağmen sürekli olarak işlemci sınırına ulaşıyorsa, işlemci sınırını artırmak amacıyla veritabanını veya elastik havuzu ölçeklendirmeyi göz önünde bulundurun.
Hizmet katmanına ve işlem boyutuna göre Azure SQL Veritabanı için kaynak sınırlarını bulun:
- vCore satın alma modeli kullanıldığında tek veritabanları için kaynak sınırları
- Sanal çekirdek satın alma modeli kullanıldığında elastik havuzlar için kaynak sınırları
- DTU satın alma modeli kullanıldığında tek veritabanları için kaynak sınırları
- DTU satın alma modelini kullanan elastik havuzlar için kaynak sınırları
Çalışanların Azure SQL Veritabanı kaynak idaresi hakkında daha fazla bilgi edinin.
Hata 10929: Kaynak Kimliği: 1
10929: Resource ID: 1. The %s minimum guarantee is %d, maximum limit is %d and the current usage for the database is %d. However, the server is currently too busy to support requests greater than %d for this database. See http://go.microsoft.com/fwlink/?LinkId=267637 for assistance. Otherwise, please try again later.
Hata 40501: Hizmet şu anda meşgul
40501: The service is currently busy. Retry the request after 10 seconds. Incident ID: %ls. Code: %d.
Hata 40501, kaynak sınırlarının aşıldığını gösteren bir motor kontrol kısıtlama hatasıdır.
Kaynak sınırları hakkında daha fazla bilgi için bkz. Azure SQL Veritabanı kaynak yönetimi.
Hata 40544: Veritabanı boyut kotasına ulaştı
40544: The database has reached its size quota. Partition or delete data, drop indexes, or consult the documentation for possible resolutions. Incident ID: <ID>. Code: <code>.
Bu hata, veritabanı boyut kotasına ulaştığında oluşur.
Aşağıdaki adımlar sorunu çözmenize yardımcı olabilir veya size daha fazla seçenek sunabilir:
Azure portalındaki panoyu kullanarak veritabanının geçerli boyutunu denetleyin.
Not
Hangi tabloların en fazla alan tükettiği ve dolayısıyla temizleme için olası adaylar olduğunu belirlemek için aşağıdaki SQL sorgusunu çalıştırın:
SELECT o.name, SUM(p.row_count) AS 'Row Count', SUM(p.reserved_page_count) * 8.0 / 1024 AS 'Table Size (MB)' FROM sys.objects o JOIN sys.dm_db_partition_stats p on p.object_id = o.object_id GROUP BY o.name ORDER BY [Table Size (MB)] DESC; GOGeçerli boyut, sürümünüz için desteklenen boyut üst sınırını geçmezse, MAXSIZE ayarını artırmak için ALTER DATABASE kullanabilirsiniz.
Veritabanı sürümünüz için desteklenen maksimum boyutu zaten geçtiyse aşağıdaki adımlardan birini veya daha fazlasını deneyin:
- Normal veritabanı temizleme etkinlikleri gerçekleştirin. Örneğin, kesme/silme kullanarak istenmeyen verileri temizleyin veya SQL Server Integration Services (SSIS) veya toplu kopyalama programı (bcp) yardımcı programını kullanarak verileri taşıyın.
- Verileri bölümleyin veya silin, dizinleri bırakın veya olası çözümler için belgelere bakın.
- Veritabanı ölçeklendirme için bkz . Tek veritabanı kaynaklarını ölçeklendirme ve Elastik havuz kaynaklarını ölçeklendirme.
Hata 40549: Uzun süre çalışan bir işleminiz olduğundan oturum sonlandırıldı
40549: Session is terminated because you have a long-running transaction. Try shortening your transaction.
Bu hatayla tekrar tekrar karşılaşırsanız şu adımları izleyerek sorunu çözmeyi deneyin:
Açık oturumlar arasında,
duration_mssütununda yüksek değere sahip olanları görüntülemek için aşağıdaki sorguyu çalıştırın.SELECT r.start_time, DATEDIFF(ms,start_time, SYSDATETIME()) as duration_ms, r.session_id, r.request_id, r.blocking_session_id, r.status, r.command, DB_NAME(r.database_id) AS database_name, i.parameters, i.event_info AS input_buffer, r.last_wait_type, r.open_transaction_count, r.total_elapsed_time, r.cpu_time, r.logical_reads, r.writes, s.login_time, s.login_name, s.program_name, s.host_name FROM sys.dm_exec_requests as r JOIN sys.dm_exec_sessions as s on r.session_id=s.session_id OUTER APPLY sys.dm_exec_input_buffer (r.session_id,r.request_id) AS i WHERE s.is_user_process=1 ORDER BY start_time ASC; GOSütunun
input_buffersütunundansys.fn_MSxe_read_event_streamokuma yaptığını gösterdiği satırları yoksayabilirsiniz: bu talepler Genişletilmiş Olay oturumlarıyla ilgilidir.Engellemenin
blocking_session_iduzun süren işlemlere katkıda bulunup bulunmadığını görmek için sütunu inceleyin.Not
Azure SQL Veritabanı'nda engelleme sorunlarını giderme hakkında daha fazla bilgi için bkz. Engelleme sorunlarını anlama ve çözme.
Sorgularınızı toplu olarak oluşturmayı göz önünde bulundurun. Toplu işleme hakkında bilgi için Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği uygulama performansını iyileştirmek için toplu işlemler nasıl kullanılır konusuna bakın.
Hata 40551: Aşırı tempdb kullanımı nedeniyle oturum sonlandırıldı
40551: The session has been terminated because of excessive TEMPDB usage. Try modifying your query to reduce the temporary table space usage.
Bu soruna geçici bir çözüm bulmak için aşağıdaki adımları uygulayın:
- Geçici tablo alanı kullanımını azaltmak için sorguları değiştirin.
- Artık gerekli olmayan geçici nesneleri bırakın.
- Tabloları kısaltın veya kullanılmayan tabloları kaldırın.
Hata 40552: Aşırı işlem günlüğü alanı kullanımı nedeniyle oturum sonlandırıldı
40552: The session has been terminated because of excessive transaction log space usage. Try modifying fewer rows in a single transaction.
Bu sorunu çözmek için aşağıdaki yöntemleri deneyin:
- Sorun ekleme, güncelleştirme veya silme işlemleri nedeniyle oluşabilir. Toplu işlem gerçekleştirerek veya birden çok daha küçük işleme bölerek hemen işlem gören satır sayısını azaltmaya çalışın.
- Dizin yeniden oluşturma işlemleri nedeniyle sorun oluşabilir. Bu sorunu geçici olarak çözmek için, tablodan etkilenen satır sayısının (güncellenen alanın bayt cinsinden ortalama boyutu + 80) * 2 gigabayt (GB) olduğundan emin olun.
- Dizin yeniden derlemesi için, güncelleştirilen alanın ortalama boyutu, ortalama dizin boyutuyla değiştirilmelidir.
- Daha fazla bilgi için bkz. Azure SQL Veritabanı'nda tam işlem günlüğü sorunlarını giderme ve Azure SQL Yönetilen Örneği'nde tam işlem günlüğü sorunlarını giderme.
Hata 40553: Aşırı bellek kullanımı nedeniyle oturum sonlandırıldı
40553: The session has been terminated because of excessive memory usage. Try modifying your query to process fewer rows.
Bu sorunu geçici olarak çözmek için sorguyu iyileştirmeyi deneyin.
Ayrıntılı sorun giderme yordamı için bkz. Sorgum bulutta sorunsuz çalışıyor mu?
Diğer yetersiz bellek hataları ve örnek sorgular hakkında daha fazla bilgi için bkz. Azure SQL Veritabanı ile yetersiz bellek hatalarını giderme.
Kaynak idaresi hata iletileri tablosu
| Hata kodu | Önem Derecesi | Açıklama |
|---|---|---|
10928 |
20 | Resource ID: %d. The %s limit for the database is %d and has been reached. See 'http://go.microsoft.com/fwlink/?LinkId=267637' for assistance.Kaynak Kimliği, sınıra ulaşmış olan kaynağı gösterir. Kaynak Kimliği = 1 olduğunda, bu bir çalışan sınırına ulaşıldığını gösterir. Hata 10928: Kaynak Kimliği : 1'de daha fazla bilgi edinin. Veritabanının istek sınırı :%d ve ulaşıldı. Kaynak Kimliği = 2 olduğunda bu, oturum sınırına ulaşıldığını gösterir. Kaynak sınırları hakkında daha fazla bilgi edinin: • Azure SQL Veritabanı kaynak yönetimi. • DTU satın alma modeli için kaynak sınırları. • Tek veritabanları için sanal çekirdek tabanlı sınırlar. • Azure SQL Yönetilen Örneği kaynak sınırları. |
10936 |
20 | Resource ID: %d. The %s limit for the elastic pool is %d and has been reached. See 'http://go.microsoft.com/fwlink/?LinkId=267637' for assistance.Kaynak Kimliği, sınıra ulaşmış olan kaynağı gösterir. Kaynak Kimliği = 1 olduğunda, bu bir çalışan sınırına ulaşıldığını gösterir. Hata 10936: Kaynak Kimliği: 1. Elastik havuzun istek sınırı %d'ye ulaşılmıştır. Daha fazla bilgi edinin. Kaynak Kimliği = 2 olduğunda bu, oturum sınırına ulaşıldığını gösterir. Kaynak sınırları hakkında daha fazla bilgi edinin: • Azure SQL Veritabanı kaynak yönetimi. • DTU satın alma modelini kullanan elastik havuzlar için kaynak sınırları. • Elastik havuzlar için sanal çekirdek tabanlı sınırlar. • Azure SQL Yönetilen Örneği kaynak sınırları. |
10929 |
20 | Resource ID: %d. The %s minimum guarantee is %d, maximum limit is %d, and the current usage for the database is %d. However, the server is currently too busy to support requests greater than %d for this database.Kaynak Kimliği, sınıra ulaşmış olan kaynağı gösterir. Çalışan iş parçacıkları için Kaynak Kimliği = 1. Oturumlar için Kaynak Kimliği = 2. Daha fazla bilgi için, şuraya bakın: • Azure SQL Veritabanı kaynak yönetimi. • DTU satın alma modelini kullanan elastik havuzlar için kaynak sınırları. • Tek veritabanları için sanal çekirdek tabanlı sınırlar. • Elastik havuzlar için sanal çekirdek tabanlı sınırlar. • Azure SQL Yönetilen Örneği kaynak sınırları. Aksi takdirde, daha sonra yeniden deneyin. |
40544 |
20 | The database has reached its size quota. Partition or delete data, drop indexes, or consult the documentation for possible resolutions.Veritabanı ölçeklendirme için bkz . Tek veritabanı kaynaklarını ölçeklendirme ve Elastik havuz kaynaklarını ölçeklendirme. |
40549 |
16 | Session is terminated because you have a long-running transaction. Try shortening your transaction.Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği uygulama performansını geliştirmek için toplu işlemleri nasıl kullanacağınızı öğrenmek için bkz Toplu işlemleri kullanarak Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği uygulama performansını geliştirme. |
40550 |
16 | The session has been terminated because it has acquired too many locks. Try reading or modifying fewer rows in a single transaction.Toplu işlem hakkında bilgi için bkz: Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği uygulama performansını geliştirmek için toplu işlem nasıl kullanılır. |
40551 |
16 | The session has been terminated because of excessive tempdb usage. Try modifying your query to reduce the temporary table space usage.Geçici nesneler kullanıyorsanız, oturumda artık gerekli olmayan geçici nesneleri bırakarak veritabanında yer tempdb tasarrufu yapın. SQL Veritabanı sınırları hakkında tempdb daha fazla bilgi için, SQL Veritabanı'ndaki tempdb veritabanına bakın. |
40552 |
16 | The session has been terminated because of excessive transaction log space usage. Try modifying fewer rows in a single transaction.Toplu işleme hakkında bilgi için Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği uygulama performansını iyileştirmek için toplu işlemler nasıl kullanılır konusuna bakın. Eğer bcp.exe yardımcı programını veya System.Data.SqlClient.SqlBulkCopy sınıfını kullanarak toplu eklemeler gerçekleştirirseniz, her işlemde sunucuya kopyalanan satır sayısını sınırlamak için -b batchsize veya BatchSize seçeneklerini kullanmayı deneyin. Eğer ALTER INDEX ifadesini kullanarak bir dizini yeniden oluşturuyorsanız, REBUILD WITH ONLINE = ON seçeneğini kullanmayı deneyin. Sanal çekirdek satın alma modelinin işlem günlüğü boyutları hakkında bilgi için bkz: • Tek veritabanları için sanal çekirdek tabanlı sınırlar. • Elastik havuzlar için sanal çekirdek tabanlı sınırlar. • Azure SQL Yönetilen Örneği kaynak sınırları. |
40553 |
16 | The session has been terminated because of excessive memory usage. Try modifying your query to process fewer rows.Transact-SQL kodunuzdaki ORDER BY ve GROUP BY işlemlerinin sayısını azaltmak, sorgunuzun bellek gereksinimlerini düşürür. Veritabanı ölçeklendirme için bkz . Tek veritabanı kaynaklarını ölçeklendirme ve Elastik havuz kaynaklarını ölçeklendirme. Yetersiz bellek hataları ve örnek sorgular hakkında daha fazla bilgi için bkz. Azure SQL Veritabanı ile yetersiz bellek hatalarını giderme. |
Elastik havuz hataları
Aşağıdaki hatalar elastik havuzları oluşturma ve kullanmayla ilgilidir:
| Hata kodu | Önem Derecesi | Açıklama | Düzeltici eylem |
|---|---|---|---|
1132 |
17 | The elastic pool has reached its storage limit. The storage usage for the elastic pool cannot exceed (%d) MBs.Elastik havuzun depolama sınırına ulaşıldığında veritabanına veri yazmaya çalışma. Kaynak sınırları hakkında bilgi için bkz: • DTU satın alma modelini kullanan elastik havuzlar için kaynak sınırları. • Elastik havuzlar için sanal çekirdek tabanlı sınırlar. |
Elastik havuzun depolama sınırını artırmak, elastik havuzdaki tek tek veritabanları tarafından kullanılan depolamayı azaltmak veya veritabanlarını elastik havuzdan kaldırmak için mümkünse DTU'ları artırmayı ve/veya elastik havuza depolama alanı eklemeyi göz önünde bulundurun. Elastik havuz ölçeklendirmesi için bkz . Elastik havuz kaynaklarını ölçeklendirme. Veritabanlarından kullanılmayan alanı kaldırma hakkında daha fazla bilgi için bkz. Azure SQL Veritabanı veritabanları için dosya alanını yönetme. |
10929 |
16 | The %s minimum guarantee is %d, maximum limit is %d, and the current usage for the database is %d. However, the server is currently too busy to support requests greater than %d for this database.Kaynak sınırları hakkında bilgi için bkz: • Elastik havuzlar için DTU kaynak sınırları. • Elastik havuzlar için sanal çekirdek tabanlı sınırlar. Aksi takdirde, daha sonra yeniden deneyin. Veritabanı başına minimum DTU / sanal çekirdek; Veritabanı başına maksimum DTU / sanal çekirdek. Elastik havuzdaki tüm veritabanlarındaki eş zamanlı çalışanların toplam sayısı havuz sınırını aşmaya çalıştı. |
Elastik havuzun işlemci limitini artırmak için, mümkünse elastik havuzun DTU’larını veya sanal çekirdeklerini artırmayı veya elastik havuzdan veritabanlarını kaldırmayı göz önünde bulundurun. |
40844 |
16 | Database '%ls' on Server '%ls' is a '%ls' edition database in an elastic pool and cannot have a continuous copy relationship. |
Yok |
40857 |
16 | Elastic pool not found for server: '%ls', elastic pool name: '%ls'. Specified elastic pool does not exist in the specified server. |
Geçerli bir elastik havuz adı sağlayın. |
40858 |
16 | Elastic pool '%ls' already exists in server: '%ls'. Specified elastic pool already exists in the specified server. |
Yeni elastik havuz adını belirleyin. |
40859 |
16 | Elastic pool does not support service tier '%ls'. Specified service tier is not supported for elastic pool provisioning. |
Varsayılan hizmet katmanını kullanmak için doğru sürümü sağlayın veya hizmet katmanını boş bırakın. |
40860 |
16 | Elastic pool '%ls' and service objective '%ls' combination is invalid. Elastic pool and service tier can be specified together only if resource type is specified as 'ElasticPool'. |
Elastik havuz ve hizmet katmanının doğru bileşimini belirtin. |
40861 |
16 | The database edition '%.*ls' cannot be different than the elastic pool service tier which is '%.*ls'. The database edition is different than the elastic pool service tier. |
Elastik havuz hizmet katmanından farklı bir veritabanı sürümü belirtmeyin. Veritabanı sürümünün belirtilmesi gerekmez. |
40862 |
16 | Elastic pool name must be specified if the elastic pool service objective is specified. Elastic pool service objective does not uniquely identify an elastic pool. |
Elastik havuz hizmeti hedefini kullanıyorsanız elastik havuz adını belirtin. |
40864 |
16 | The DTUs for the elastic pool must be at least (%d) DTUs for service tier '%.*ls'. Attempting to set the DTUs for the elastic pool below the minimum limit. |
Elastik havuzun DTU'larını en az en düşük sınıra ayarlamayı yeniden deneyin. |
40865 |
16 | The DTUs for the elastic pool cannot exceed (%d) DTUs for service tier '%.*ls'. Attempting to set the DTUs for the elastic pool above the maximum limit. |
Elastik havuz için DTU'ları en yüksek sınırdan büyük olmayacak şekilde ayarlamayı yeniden deneyin. |
40867 |
16 | The DTU max per database must be at least (%d) for service tier '%.*ls'. Attempting to set the DTU max per database below the supported limit. |
İstenen ayarı destekleyen elastik havuz hizmet katmanını kullanmayı göz önünde bulundurun. |
40868 |
16 | The DTU max per database cannot exceed (%d) for service tier '%.*ls'. Attempting to set the DTU max per database beyond the supported limit. |
İstenen ayarı destekleyen elastik havuz hizmet katmanını kullanmayı göz önünde bulundurun. |
40870 |
16 | The DTU min per database cannot exceed (%d) for service tier '%.*ls'. Attempting to set the DTU min per database beyond the supported limit. |
İstenen ayarı destekleyen elastik havuz hizmet katmanını kullanmayı göz önünde bulundurun. |
40873 |
16 | The number of databases (%d) and DTU min per database (%d) cannot exceed the DTUs of the elastic pool (%d). Attempting to specify DTU min for databases in the elastic pool that exceeds the DTUs of the elastic pool. |
Elastik havuzun DTU'larını artırmayı, veritabanı başına minimum DTU'yu azaltmayı veya elastik havuzdaki veritabanı sayısını azaltmayı düşünün. |
40877 |
16 | An elastic pool cannot be deleted unless it does not contain any databases. The elastic pool contains one or more databases and therefore cannot be deleted. |
Elastik havuzu silmek için veritabanlarını havuzdan çıkarın. |
40881 |
16 | The elastic pool '%.*ls' has reached its database count limit. The database count limit for the elastic pool cannot exceed (%d) for an elastic pool with (%d) DTUs. Attempting to create or add database to elastic pool when the database count limit of the elastic pool has been reached. |
Veritabanı sınırını artırmak veya elastik havuzdan veritabanlarını kaldırmak için mümkünse elastik havuzun DTU'larını artırmayı göz önünde bulundurun. |
40889 |
16 | The DTUs or storage limit for the elastic pool '%.*ls' cannot be decreased since that would not provide sufficient storage space for its databases. Attempting to decrease the storage limit of the elastic pool below its storage usage. |
DTU'larını veya depolama sınırını azaltmak için elastik havuzdaki tek tek veritabanlarının depolama kullanımını azaltmayı veya veritabanlarını havuzdan kaldırmayı göz önünde bulundurun. |
40891 |
16 | The DTU min per database (%d) cannot exceed the DTU max per database (%d). Attempting to set the DTU min per database higher than the DTU max per database. |
Veritabanı başına DTU min değerinin veritabanı başına DTU üst sınırını aşmadığından emin olun. |
TBD |
16 | The storage size for an individual database in an elastic pool cannot exceed the max size allowed by '%.*ls' service tier elastic pool. The max size for the database exceeds the max size allowed by the elastic pool service tier. |
Elastik havuz hizmet katmanı tarafından izin verilen maksimum boyut sınırları içinde veritabanının en büyük boyutunu ayarlayın. |
Oturum açma tarafından istenen "ana" veritabanı açılamıyor. Oturum açılamadı
Bu sorun, hesabın veritabanına erişim master izni olmadığından oluşur. Ancak varsayılan olarak, SQL Server Management Studio (SSMS) master veritabanına bağlanmaya çalışır.
Bu sorunu çözmek için şu adımları izleyin:
SSMS'nin oturum açma ekranında Seçenekler'i ve ardından Bağlantı Özellikleri'ni seçin.
Veritabanına bağlan alanında, kullanıcının varsayılan veritabanı adını varsayılan oturum açma veritabanı olarak girin ve bağlan'ı seçin.
Salt okunur hatalar
Salt okunur bir veritabanına yazmaya çalışırsanız bir hata alırsınız. Bazı senaryolarda veritabanının salt okunur durumunun nedeni hemen net olmayabilir.
Hata 3906: Veritabanı salt okunur olduğundan 'databaseName' veritabanı güncelleştirilemedi.
Salt okunur bir veritabanını değiştirmeye çalışırken aşağıdaki hata oluşur.
Msg 3906, Level 16, State 2, Line 1
Failed to update database "%d" because the database is read-only.
Veritabanının neden salt okunur olduğuna ilişkin birden çok olası açıklama vardır.
Manuel yük devretme işleminden sonra uygulamalar eski çoğaltmaya bağlanmaya devam ediyor.
Azure SQL Veritabanı'nda, başka bir çoğaltıcıya geçiş işleminden sonra uygulamanız DNS nedeniyle önceki ana çoğaltıcıya bağlanmaya devam ediyor olabilir. Yük devretme grubu bağlantı yönlendirmesi DNS kullanılarak uygulanır.
Olası kök nedenler:
Yük devretme sırasında, yük devretme grubu uç noktaları, uygun DNS girişinin hedefi değiştirilerek, uygun şekilde yeni birincil ve yeni ikincil sunuculara işaret edecek şekilde güncellenir. Varsayılan olarak, DNS girişleri 30 saniyelik bir TTL ile oluşturulur ve bu da DNS istemcilerinin bu girdileri 30 saniye boyunca önbelleğe aldığı anlamına gelir. Sonuç olarak, DNS kayıtlarında yapılan güncelleştirmeler hemen yayılmaz; girdileri, tüm istemciler ve ara düğümler önbelleklerini yenileyene kadar eski olacaktır. Bu nedenle, yük devretme grubu uç noktalarının yük devretme sonrasında yeni hedeflerine yönlendirilmesi için oturum açma işlemlerinin 0 ila yaklaşık 10 dakika (ağ topolojisine bağlı olarak) kadar sürebilir. DNS isteklerine yanıt veren ara ağ düğümleri de DNS sonuçlarını bir süre önbelleğe aldığından DNS önbelleklerinin boşaltılması soruna yardımcı olabilir veya olmayabilir.
Bu sorun için önerilen geçici çözüm, istemcide DNS girişleri yenilenene kadar beklemektir. Şu anda bu geçici çözüm, sorunun 10 dakika içinde çözülmesine neden olacaktır.
Bazı SQL istemci kitaplıkları, yeni bir veritabanı bağlantısı gerektiğinde kapatmak ve yeniden açmak yerine aynı veri kaynağına bağlantıları yeniden kullanan "bağlantı havuzu oluşturma" adlı bir özellik kullanır. Özellikle, ADO.NET'te bağlantı havuzu varsayılan olarak etkindir. Sorun 1'de açıklandığı zaman birleştirildiğinde, bağlantı havuzu yeni açılan bağlantıların eski veritabanına yeniden bağlanmasına neden olabilir ve böylece uygulamanın yeni birincil veritabanına süresiz olarak bağlanmasını engelleyebilir.
Çözümler:
Yük Devretme Grubu yük devretme işleminden sonra bu DNS sorununun üç olası geçici çözümü vardır:
- "Uygulamayı, 'salt okunur' bir hatayla karşılaşıldığında
SQLConnection.ClearAllPoolsveyaSQLConnection.ClearPool(conn)'i çağıracak şekilde değiştirin." - Uygulama bağlantı dizesinde bağlantı havuzunu devre dışı bırakmak için
Pooling=Falsebelirtmeniz gerekir. Uygulama sık sık açılır ve kapanırsa performansı önemli ölçüde etkileyebileceğinden bu test edilmelidir. - DNS çoğaltma/önbelleğe alma gecikmelerini önlemek için bir diğer seçenek de, 3906 ile karşılaşıldıktan sonra bir süre için Azure SQL Veritabanı mantıksal sunucu adını (özgün ikincil sunucunun, şimdi yeni birincil sunucunun) kullanarak doğrudan bağlanmaktır.
Salt okunur bir çoğaltmaya bağlı olabilirsiniz
Hem Azure SQL Veritabanı hem de Azure SQL Yönetilen Örneği için, salt okunur bir çoğaltıcıdaki veritabanına bağlı olabilirsiniz. Bu durumda, DATABASEPROPERTYEX() işlevini kullanan aşağıdaki sorgu döndürürREAD_ONLY:
SELECT DATABASEPROPERTYEX(DB_NAME(), 'Updateability');
GO
SQL Server Management Studio kullanarak bağlanıyorsanız, bağlantı seçeneklerinizin Ek Bağlantı ParametreleriApplicationIntent=ReadOnlysekmesinde belirttiğinizi doğrulayın.
Bağlantı bir uygulamadan veya bağlantı dizesi kullanan bir istemciden geliyorsa, bağlantı dizesinin ApplicationIntent=ReadOnly olarak belirtilip belirtilmediğini doğrulayın. Salt okunur çoğaltmaya bağlanma bölümünde daha fazla bilgi edinin.
Veritabanı salt okunur olarak ayarlanmış olabilir
Azure SQL Veritabanı kullanıyorsanız veritabanının kendisi salt okunur olarak ayarlanmış olabilir. Veritabanının durumunu aşağıdaki sorguyla doğrulayabilirsiniz:
SELECT name, is_read_only
FROM sys.databases
WHERE database_id = DB_ID();
ALTER DATABASE Transact-SQL kullanarak Azure SQL Veritabanı'daki bir veritabanının salt okunur durumunu değiştirebilirsiniz. Şu anda yönetilen örnekteki bir veritabanını salt okunur olarak ayarlayamazsınız.
Bağlantı sorunundan kaynaklanan bir hata olup olmadığını onaylayın
Bir hatanın bağlantı sorunundan kaynaklanıp kaynaklanmadığını onaylamak için, aşağıdaki gibi bir bağlantı açmaya yönelik çağrıları gösteren çerçeveler için yığın izlemesini gözden geçirin (SqlConnection sınıfı başvurusuna dikkat edin):
System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at AzureConnectionTest.Program.Main(String[] args)
ClientConnectionId:<Client connection ID>
Özel durum sorgu sorunları tarafından tetiklendiğinde, aşağıdakine benzer bir çağrı yığını görürsünüz (SqlCommand sınıfına başvuruyu not edin). Bu durumda sorgularınızı ayarlayın.
at System.Data.SqlClient.SqlCommand.ExecuteReader()
at AzureConnectionTest.Program.Main(String[] args)
ClientConnectionId:<Client ID>
Performansı ayarlama hakkında daha fazla bilgi için bkz:
- Azure SQL dizinleri ve istatistiklerinin bakımını yapma
- Azure SQL Veritabanı’nda uygulamaları ve veritabanlarını performans için ayarlama
- Dinamik yönetim görünümlerini kullanarak performansı izleme
- Azure SQL Veritabanı'de Sorgu Deposu'yu çalıştırma
İlgili içerik
- Bağlantı mimarisi
- Azure SQL Veritabanı ve Azure Synapse Analytics ağ erişim denetimleri
- Azure SQL Veritabanı'de tam işlem günlüğü sorunlarını giderme
- Azure SQL Yönetilen Örneği'nde tam işlem günlüğü sorunlarını giderme
- Geçici bağlantı hatalarıyla ilgili sorunları giderme
- Azure SQL Veritabanı ve Doku SQL veritabanı kilitlenmeleri analiz etme ve önleme