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.
Applies to:Azure SQL Database
İşlem günlüğü dolu olduğunda ve yeni işlemleri kabul edemiyorsa 9002 veya 40552 hataları görebilirsiniz. Bu hatalar, Azure SQL Database tarafından yönetilen veritabanı işlem günlüğü alan eşiklerini aştığında ve işlemleri kabul etmeye devam edemeyeceğinde oluşur. Bu hatalar, SQL Server tam işlem günlüğüyle ilgili sorunlara benzer, ancak SQL Server, Azure SQL Database ve Azure SQL Managed Instance farklı çözümlere sahiptir.
Not
Bu makale Azure SQL Database odaklanmıştır. Azure SQL Database, Microsoft SQL Server veritabanı altyapısının en son kararlı sürümünü temel alır, bu nedenle içeriğin çoğu benzerdir, ancak sorun giderme seçenekleri ve araçları SQL Server farklı olabilir.
Azure SQL Managed Instance işlem günlüğü sorunlarını giderme hakkında daha fazla bilgi için bkz. Azure SQL Managed Instance ile işlem günlüğü hatalarını giderme.
SQL Server'da işlem günlüğü sorunlarını giderme hakkında daha fazla bilgi için bkz. Tam İşlem Günlüğü Oluşturma (SQL Server Hatası 9002).
Otomatik yedeklemeler ve işlem günlüğü
Azure SQL Database işlem günlüğü yedeklemeleri otomatik olarak alınır. Sıklık, saklama ve daha fazla bilgi için bkz . Otomatik yedeklemeler.
Boş disk alanı, veritabanı dosyası büyümesi ve dosya konumu da yönetildiğinden işlem günlüğü sorunlarının tipik nedenleri ve çözümleri SQL Server farklıdır.
SQL Server'a benzer şekilde, günlük yedeklemesi başarıyla tamamlandığında her veritabanı için işlem günlüğü kısaltılır. Kesme, günlük dosyasında boş alan bırakır ve bu alan daha sonra yeni işlemler için kullanılabilir. Günlük dosyası, günlük yedeklemelerle kısaltılamadığında, yeni işlemlere uyum sağlamak için büyür. Günlük dosyası Azure SQL Database üst sınırına kadar büyürse, yeni yazma işlemleri başarısız olur.
İşlem günlüğü boyutları hakkında bilgi için bkz:
- Tek bir veritabanının sanal çekirdek kaynak sınırları hakkında daha fazla bilgi için, sanal çekirdek satın alma modelini kullanan tek veritabanları için kaynak sınırlarına bakın.
- Elastik havuzlar için sanal çekirdek kaynak sınırları için bkz . Sanal çekirdek satın alma modelini kullanan elastik havuzlar için kaynak sınırları.
- Tek veritabanları için DTU kaynak sınırlarını öğrenmek için, DTU satın alma modelini kullanarak tek veritabanları için kaynak sınırları kısmına bakın.
- Elastik havuzlar için DTU kaynak sınırları için bkz . DTU satın alma modelini kullanan elastik havuzlar için kaynak sınırları.
İşlem günlüğünün kesilmesi engellendi
Belirli bir durumda günlük kesilmesini engelleyen nedenleri öğrenmek için log_reuse_wait_desc'ye sys.databases'da bakın. Günlük yeniden kullanım beklemesi, işlem günlüğünün normal bir günlük yedeklemesi ile kısaltılmasını engelleyen koşul veya nedenleri size bildirir. Daha fazla bilgi için bkz. sys.databases (Transact-SQL).
SELECT [name], log_reuse_wait_desc FROM sys.databases;
Azure SQL Database için, bu sorguyu yürütmek için master veritabanı yerine belirli bir kullanıcı veritabanına bağlanmanızı öneririz.
Aşağıdaki log_reuse_wait_desc değerleri sys.databases veritabanının işlem günlüğü kesilmesinin neden engellendiğini gösterebilir:
| günlük_yeniden_kullanım_bekleme_açıklaması | Tanılama | Yanıt gerekli |
|---|---|---|
NOTHING |
Tipik durum. Günlüğün kısaltılmasını engelleyen bir şey yok. | Hayır |
CHECKPOINT |
Günlük kısaltılması için bir denetim noktası gereklidir. Nadir. | Sürdürülebilir olmadığı sürece yanıt gerekmez. Devam ederse Azure Support ile bir destek isteği oluşturun. |
LOG BACKUP |
Kayıt yedeklemesi gereklidir. | Sürdürüldüğü takdirde yanıt gerekmez. Devam ederse Azure Support ile bir destek isteği oluşturun. |
ACTIVE BACKUP OR RESTORE |
Veritabanı yedeklemesi devam ediyor. | Sürdürüldüğü takdirde yanıt gerekmez. Devam ederse Azure Support ile bir destek isteği oluşturun. |
ACTIVE TRANSACTION |
Devam eden bir işlem kütük kısaltılmasını engelliyor. | Etkin ve/veya kaydedilmemiş işlemler nedeniyle günlük dosyası kısaltılamıyor. Sonraki bölüme bakın. |
REPLICATION |
Azure SQL Database change data capture (CDC) etkinleştirilirse bu durum oluşabilir. | sys.dm_cdc_errors sorgula ve hataları çöz. Çözümlenemezse, Azure Support ile bir destek isteği oluşturun. |
AVAILABILITY_REPLICA |
İkincil eşe senkronizasyon devam ediyor. | Devam edilmediği sürece yanıt gerekmez. Devam ederse Azure Support ile bir destek isteği oluşturun. |
Etkin bir işlem tarafından log kesme önlendi
Yeni işlemleri kabul edemeyen bir işlem günlüğü için en yaygın senaryo, uzun süre çalışan veya engellenen bir işlemdir.
Kaydedilmemiş veya etkin işlemleri ve bunların özelliklerini bulmak için bu örnek sorguyu çalıştırın.
- sys.dm_tran_active_transactions işlem özellikleri hakkındaki bilgileri döndürür.
- sys.dm_exec_sessions oturum bağlantısı bilgilerini döndürür.
-
sys.dm_exec_requests aktif istekler için istek bilgilerini döndürür. Bu sorgu, engellenen oturumları tanımlamak için de kullanılabilir;
request_blocked_byöğesini arayın. Daha fazla bilgi için Engelleme bilgilerini toplama sayfasına bakın. - sys.dm_exec_sql_text veya sys.dm_exec_input_buffer DMV'lerini kullanarak geçerli isteğin metnini veya giriş arabelleği metnini döndürür.
sys.dm_exec_sql_textalanınıntexttarafından döndürülen veriler NULL ise, istek etkin değildir ancak beklemede bir işlem vardır. Bu durumda,event_infoalanısys.dm_exec_input_bufferveritabanı altyapısına geçirilen son deyimi içerir.
SELECT [database_name] = db_name(s.database_id)
, tat.transaction_id, tat.transaction_begin_time, tst.session_id
, session_open_transaction_count = tst.open_transaction_count
, transaction_duration_s = datediff(s, tat.transaction_begin_time, sysdatetime())
, input_buffer = ib.event_info
, request_text = CASE WHEN r.statement_start_offset = 0 and r.statement_end_offset= 0 THEN left(est.text, 4000)
ELSE SUBSTRING ( est.[text], r.statement_start_offset/2 + 1,
CASE WHEN r.statement_end_offset = -1 THEN LEN (CONVERT(nvarchar(max), est.[text]))
ELSE r.statement_end_offset/2 - r.statement_start_offset/2 + 1
END ) END
, request_status = r.status
, request_blocked_by = r.blocking_session_id
, transaction_state = CASE tat.transaction_state
WHEN 0 THEN 'The transaction has not been completely initialized yet.'
WHEN 1 THEN 'The transaction has been initialized but has not started.'
WHEN 2 THEN 'The transaction is active - has not been committed or rolled back.'
WHEN 3 THEN 'The transaction has ended. This is used for read-only transactions.'
WHEN 4 THEN 'The commit process has been initiated on the distributed transaction. This is for distributed transactions only. The distributed transaction is still active but further processing cannot take place.'
WHEN 5 THEN 'The transaction is in a prepared state and waiting resolution.'
WHEN 6 THEN 'The transaction has been committed.'
WHEN 7 THEN 'The transaction is being rolled back.'
WHEN 8 THEN 'The transaction has been rolled back.' END
, transaction_name = tat.name
, azure_dtc_state --Applies to: Azure SQL Database only
= CASE tat.dtc_state
WHEN 1 THEN 'ACTIVE'
WHEN 2 THEN 'PREPARED'
WHEN 3 THEN 'COMMITTED'
WHEN 4 THEN 'ABORTED'
WHEN 5 THEN 'RECOVERED' END
, transaction_type = CASE tat.transaction_type WHEN 1 THEN 'Read/write transaction'
WHEN 2 THEN 'Read-only transaction'
WHEN 3 THEN 'System transaction'
WHEN 4 THEN 'Distributed transaction' END
, tst.is_user_transaction
, local_or_distributed = CASE tst.is_local WHEN 1 THEN 'Local transaction, not distributed' WHEN 0 THEN 'Distributed transaction or an enlisted bound session transaction.' END
, transaction_uow --for distributed transactions.
, s.login_time, s.host_name, s.program_name, s.client_interface_name, s.login_name, s.is_user_process
, session_cpu_time = s.cpu_time, session_logical_reads = s.logical_reads, session_reads = s.reads, session_writes = s.writes
, observed = sysdatetimeoffset()
FROM sys.dm_tran_active_transactions AS tat
INNER JOIN sys.dm_tran_session_transactions AS tst on tat.transaction_id = tst.transaction_id
INNER JOIN Sys.dm_exec_sessions AS s on s.session_id = tst.session_id
LEFT OUTER JOIN sys.dm_exec_requests AS r on r.session_id = s.session_id
CROSS APPLY sys.dm_exec_input_buffer(s.session_id, null) AS ib
OUTER APPLY sys.dm_exec_sql_text (r.sql_handle) AS est;
Daha fazla alan açmak için dosya yönetimi
İşlem günlüğünün Azure SQL Database elastik havuzlarda kesilmesi engellenirse, elastik havuz için alan boşaltma çözümün bir parçası olabilir. Ancak, işlem günlüğü dosyasının kesilmesini engelleyen temel koşulun çözülmesi önemlidir. Bazı durumlarda, geçici olarak daha fazla disk alanı oluşturmak uzun süre çalışan işlemlerin tamamlanmasını sağlar ve işlem günlüğü dosyasının normal bir işlem günlüğü yedeklemesiyle kesilmesini engelleyen koşulu kaldırır. Ancak, alan boşaltma işlemi işlem günlüğü yeniden büyüyene kadar yalnızca geçici bir rahatlama sağlayabilir.
Veritabanlarının ve elastik havuzların dosya alanını yönetme hakkında daha fazla bilgi için bkz. Azure SQL Database veritabanları için dosya alanı yönetme.
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 gibi herhangi bir DML işleminde oluşabilir. Gereksiz yazma işlemlerini önlemek için işlemi gözden geçirin. Toplu işlem gerçekleştirerek veya birden çok daha küçük işleme bölerek hemen çalıştırılan satır sayısını azaltmaya çalışın. Daha fazla bilgi için bkz. SQL Veritabanı uygulama performansını geliştirmek için toplu işlem kullanma.
- Dizin yeniden oluşturma işlemleri nedeniyle sorun oluşabilir. Bu sorunu önlemek için şu formülün doğru olduğundan emin olun: (tabloda etkilenen satır sayısı) çarpı (bayt cinsinden güncellenen alanın ortalama boyutu + 80) < 2 gigabayt (GB). Büyük tablolar için bölümler oluşturmayı ve yalnızca tablonun bazı bölümlerinde dizin bakımı gerçekleştirmeyi göz önünde bulundurun. Daha fazla bilgi için bkz . Bölümlenmiş Tablolar ve Dizinler Oluşturma.
-
bcp.exeyardımcı programını veyaSystem.Data.SqlClient.SqlBulkCopysınıfını kullanarak toplu eklemeler yapıyorsanız, her işlemde sunucuya kopyalanan satır sayısını sınırlamak için-b batchsizeveyaBatchSizeseçeneklerinden birini kullanmayı deneyin. Daha fazla bilgi için bcp Yardımcı Programı'na bakınız. -
ALTER INDEXdeyimini kullanarak bir dizini yeniden derliyorsanız,SORT_IN_TEMPDB = ON,ONLINE = ONveRESUMABLE=ONseçeneklerini kullanın. Devam ettirilebilir dizinlerde, log kısaltılması daha sık olur. Daha fazla bilgi için bkz. ALTER INDEX (Transact-SQL).
Not
Diğer kaynak idaresi hataları hakkında daha fazla bilgi için bkz . Kaynak idaresi hataları.
İlgili içerik
- Azure SQL Database engelleme sorunlarını anlayın ve çözün
Azure SQL Database ve Azure SQL Managed Instance - Azure SQL Database ve SQL Managed Instance'da geçici bağlantı hatalarını giderin
- Coğrafi çoğaltma yineleme gecikmesi sorunlarını giderme
- Yetersiz bellek sorunlarını giderme
Video: Azure SQL Database