Azure SQL Yönetilen Örneği ile işlem günlüğü hatalarını giderme

Şunlar için geçerlidir:Azure SQL Yönetilen Örneği

İşlem günlüğü dolu olduğunda ve yeni işlemleri kabul edemiyorsa 9002 veya 40552 hataları görebilirsiniz. Bu hatalar, Azure SQL Yönetilen Örneği 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'da tam işlem günlüğüyle ilgili sorunlara benzer, ancak SQL Server, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği'da farklı çözümlere sahiptir.

Dekont

Bu makale Azure SQL Yönetilen Örneği odaklanmıştır. Azure SQL Yönetilen Örneği, 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'dan farklı olabilir.

Azure SQL Veritabanı işlem günlüğü sorunlarını giderme hakkında daha fazla bilgi için bkz. Azure SQL Veritabanı 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üğü Sorunlarını Giderme (SQL Server Hatası 9002).

Otomatik yedeklemeler ve işlem günlüğü

Azure SQL Yönetilen Örneği işlem günlüğü yedeklemeleri otomatik olarak alınır. Sıklık, saklama ve daha fazla bilgi için bkz . Otomatik yedeklemeler. SQL yönetilen örneğinde otomatik yedeklemelerin ne zaman gerçekleştirildiğini izlemek için Yedekleme etkinliğini izleme'yi gözden geçirin.

Veritabanı dosyalarının konumu ve adı yönetilemez, ancak yöneticiler veritabanı dosyalarını ve dosya otomatik büyütme ayarlarını yönetebilir. İşlem günlüğü sorunlarının tipik nedenleri ve çözümleri SQL Server'a benzer.

SQL Server'a benzer şekilde, günlük yedeklemesi başarıyla tamamlandığında her veritabanının işlem günlüğü kesilir. Günlük kesilmesi, etkin olmayan sanal günlük dosyalarını (VLFs) işlem günlüğünden silip dosyanın içinde yer açar ancak diskteki dosyanın boyutunu değiştirmez. Daha sonra günlük dosyasındaki boş alan yeni işlemler için kullanılabilir. Günlük dosyası günlük yedeklemeleri tarafından kesilemediğinde, günlük dosyası yeni işlemlere uyum sağlamak için büyür. Günlük dosyası Azure SQL Yönetilen Örneği en yüksek sınırına kadar büyürse, yeni yazma işlemleri başarısız olur.

Azure SQL Yönetilen Örneği'da, işlemden bağımsız olarak bir sınıra kadar eklenti depolama alanı satın alabilirsiniz. Daha fazla bilgi için bkz . Daha fazla alan açmak için dosya yönetimi.

İşlem günlüğünün kesilmesi engellendi

Belirli bir durumda günlük kesilmesini engelleyen şeyleri bulmak için içinde sys.databaseskonusuna log_reuse_wait_desc bakın. Günlük yeniden kullanım beklemesi, işlem günlüğünün normal günlük yedeklemesi tarafından kesilmesini engelleyen koşulları veya nedenleri size bildirir. Daha fazla bilgi için bkz. sys.databases (Transact-SQL).

SELECT [name], log_reuse_wait_desc FROM sys.databases;

aşağıdaki değerleri log_reuse_wait_descsys.databases , veritabanının işlem günlüğü kesilmesinin neden engellendiğini gösterebilir:

Log_reuse_wait_desc Tanılama Yanıt gerekli
HİÇBİR ŞEY Tipik durum. Günlüğün kesilmesini engelleyen bir şey yok. Hayır.
DENETİM NOKTASI Günlük kesilmesi için bir denetim noktası gereklidir. Na -dir. Devam edilmediği sürece yanıt gerekmez. Devam ederse Azure Desteği'ne bir destek isteği oluşturun.
GÜNLÜK YEDEKLEME Günlük yedeklemesi gereklidir. Devam edilmediği sürece yanıt gerekmez. Devam ederse Azure Desteği'ne bir destek isteği oluşturun.
ETKIN YEDEKLEME VEYA GERI YÜKLEME Veritabanı yedeklemesi devam ediyor. Devam edilmediği sürece yanıt gerekmez. Devam ederse Azure Desteği'ne bir destek isteği oluşturun.
ETKİn İşlem Devam eden bir işlem günlük kesilmesini engelliyor. Etkin ve/veya kaydedilmemiş işlemler nedeniyle günlük dosyası kesilemiyor. Sonraki bölüme bakın.
ÇOĞALTMA Azure SQL Yönetilen Örneği çoğaltma veya CDC etkinse oluşabilir. Devam ederse CDC veya çoğaltma ile ilgili aracıları araştırın. CDC sorunlarını gidermek için msdb.dbo.cdc_jobs'da sorgu işleri. Yoksa sys.sp_cdc_add_job aracılığıyla ekleyin. Çoğaltma için bkz . İşlem çoğaltma sorunlarını giderme. Çözümlenemezse Azure Desteği'ne bir destek isteği oluşturun.
AVAILABILITY_REPLICA İkincil çoğaltmaya eşitleme devam ediyor. Devam edilmediği sürece yanıt gerekmez. Devam ederse Azure Desteği'ne bir destek isteği oluşturun.

Etkin bir işlem tarafından günlük kesilmesi engellendi

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.

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
, 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 Yönetilen Örneği kesilmesi engellenirse, boş alan çözümün bir parçası olabilir. Ancak kök çözümleme işlemi işlem günlüğü dosyasının kesilmesini engelleyen koşulun çözümlenmesi ö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.

Azure SQL Yönetilen Örneği'da, işlemden bağımsız olarak bir sınıra kadar eklenti depolama alanı satın alabilirsiniz. Örneğin Azure portalında İşlem + depolama sayfasına erişerek Depolama GB olarak artırın. İşlem günlüğü boyut sınırları hakkında bilgi için bkz. SQL Yönetilen Örneği için kaynak sınırları. Daha fazla bilgi için bkz. Azure SQL Yönetilen Örneği veritabanları için dosya alanını yönetme.

Yedekleme depolama alanı SQL yönetilen örneği depolama alanınızdan düşülmez. Yedekleme depolama alanı, örnek depolama alanından bağımsızdır ve boyutu sınırlı değildir.

Hata 9002: Veritabanı için işlem günlüğü dolu

9002: The transaction log for database '%.*ls' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases.

Hata 9002 SQL Server'da ve Azure SQL Yönetilen Örneği aynı nedenlerle oluşur.

Tam işlem günlüğüne uygun yanıt, günlüğün doldurulmasına neden olan koşullara bağlıdır.

Hata 9002'yi çözmek için aşağıdaki yöntemleri deneyin:

  • İşlem günlüğü kesilmiyor ve tüm kullanılabilir alanı dolduracak şekilde büyüdü.
    • Azure SQL Yönetilen Örneği işlem günlüğü yedeklemeleri otomatik olduğundan, işlem günlüğü etkinliğinin kesilmesini engelleyen başka bir şey olmalıdır. Tamamlanmamış çoğaltma, CDC veya kullanılabilirlik grubu eşitlemesi kesilmesi engelliyor olabilir, bkz . İşlem günlüğü kesilmesi engellendi.
  • SQL yönetilen örneği ayrılmış depolama boyutu dolu ve işlem günlüğü büyüyemiyor.
  • İşlem Günlüğü boyutu sabit bir maksimum değere ayarlanır veya otomatik büyütme devre dışı bırakılır ve bu nedenle büyüyemez.
    • ALTER DATABASE Dosya ve Dosya Gruplarında MAXSIZE ve FILEGROWTH özelliklerine bakı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.

Hata 9002, Azure SQL Yönetilen Örneği'daki Hata 40552'den daha yaygın olsa da, her ikisi de oluşabilir.

Hata 40552'yi çö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 . Uygulama performansını geliştirmek için toplu işlemi 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ı) ile çarpıldığından (bayt + 80 olarak güncelleştirilen alanın ortalama boyutu) < 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.
  • Yardımcı programını veya System.Data.SqlClient.SqlBulkCopy sınıfını bcp.exe kullanarak toplu eklemeler gerçekleştirirseniz, her işlemde -b batchsize sunucuya kopyalanan satır sayısını sınırlamak için veya BatchSize seçeneklerini kullanmayı deneyin. Daha fazla bilgi için bkz . bcp Yardımcı Programı.
  • deyimiyle ALTER INDEX bir dizini yeniden derlediyseniz , ONLINE = ONve RESUMABLE=ON seçeneklerini kullanınSORT_IN_TEMPDB = ON. Devam ettirilebilen dizinlerde günlük kesilmesi daha sıktır. Daha fazla bilgi için bkz . ALTER INDEX (Transact-SQL).

Sonraki adımlar