Tüm Ürünler
Search
Belge Merkezi

PolarDB:Data management and cleaning

Son Güncelleme:Oct 13, 2026

PolarDB for MySQL her küme teknik özellikleri için bir maksimum depolama kapasitesi bulunur. Verilerin, günlüklerin ve geçici dosyaların sürekli büyümesi nedeniyle depolama alanı dolabilir; bu durum kümenin salt okunur modda kilitlenmesine ve normal işlemlerin aksamasına neden olabilir. Bu konuda depolama alanı bileşenleri açıklanmakta ve kullanımı görüntüleme, dosyaları temizleme ile alan geri kazanma yöntemleri sunulmaktadır.

Depolama alanı bileşenleri

PolarDB for MySQL depolama alanı bileşenlerini anlayarak alanı etkin bir şekilde yönetebilir, sorunları doğru bir şekilde tespit edebilir ve uygun optimizasyon önlemleri alabilirsiniz.

image
  • Veri dosyaları: Tablolar ve dizinler gibi iş verilerinizi depolar.

  • Günlük dosyaları: Binlog, Redo logları ve Undo loglarını içerir. Bu günlük dosyaları büyük işlemler veya yüksek eşzamanlı yazma işlemleri sırasında hızla büyüyebilir.

    Not

    PolarDB for MySQL kümeleri için Binlog varsayılan olarak devre dışıdır. Bunun yerine daha verimli bir fiziksel günlük (Redo Log) kullanılır. Kümeniz için Binlog etkinleştirilmemişse bu bölümü göz ardı edebilirsiniz.

  • Geçici dosyalar: Sıralama (ORDER BY), gruplama (GROUP BY) veya join sorguları gibi işlemler sırasında oluşturulur. Commit edilmemiş büyük işlemler de geçici Binlog önbellek dosyaları oluşturur.

  • Sistem dosyaları: Veri sözlükleri, işlem bilgileri ve doublewrite arabellekleri gibi veritabanı çalışması için gereken temel bileşenleri depolar. Bu dosyalar InnoDB motoru tarafından yönetilir ve veri tutarlılığı ile küme kurtarma için kritik öneme sahiptir. Bunları doğrudan değiştiremezsiniz.

Depolama alanı kullanımını görüntüleyin

Kümenizin depolama alanı kullanımını aşağıdaki yollardan biriyle görüntüleyebilirsiniz:

  • PolarDB konsolu adresine gidin, hedef kümenin Basic Information sayfasına gidin ve kümenin mevcut depolama kapasitesini görüntülemek için Distributed Storage alanını kontrol edin.

    image

  • PolarDB konsolu adresine gidin, hedef kümenin Diagnostics and Optimization > Quick Diagnostics sayfasına gidin ve belirli bir zamandaki depolama alanı kullanımını görüntülemek için Storage Analysis sekmesini kontrol edin.

    image

Veri dosyalarını temizleyin ve tablo alanını geri kazanın

Veri dosyalarının uzun süre düzenlenmemesi nedeniyle PolarDB for MySQL depolama alanı aşırı tüketilebilir. Ayrıca, verileri silmek için DELETE komutunu kullandıktan sonra sistem yalnızca kayıt konumlarını veya veri sayfalarını yeniden kullanılabilir olarak işaretler ve tablo dosyası boyutunu doğrudan azaltmaz. Bu durum, depolama alanının işgal altında kalmasına neden olan büyük miktarda alan parçalanmasına yol açar.

Not

Veri dosyalarını temizlerken konsolun güncellemeleri yansıtması biraz zaman alabilir. Lütfen sabırla bekleyin.

Dosyaları temizleyin

Artık ihtiyaç duyulmayan tablolar için, işgal edilen tüm alanı hemen serbest bırakmak amacıyla TRUNCATE TABLE veya DROP TABLE komutunu kullanın.

Not

Veri kaybını önlemek için işlemleri yapmadan önce verilerinizi yedekleyin.

Tablo alanını geri kazanın

Önemli düzeyde parçalanma içeren ve saklamanız gereken tablolar için, yoğun olmayan saatlerde OPTIMIZE TABLE komutunu çalıştırabilirsiniz. Bu işlem tabloyu yeniden oluşturur, parçalanmayı ortadan kaldırır ve boş alanı geri kazanır. Bu optimizasyonu yapmak için DMS aracını kullanabilirsiniz. DMS hız sınırlamayı destekler; bu özellik iş yükünü daha az etkiler ancak daha yavaş çalışır.

Dikkat edilmesi gerekenler

  • Hedef tablonun parçalanma oranı düşük olduğunda, OPTIMIZE TABLE komutunu çalıştırmak tablespace boyutunu önemli ölçüde azaltmayabilir. Hedef tablonun parçalanma oranını kontrol etmek için DATA_FREE görünümündeki information_schema.tables alanını kontrol edebilirsiniz.

  • OPTIMIZE TABLE komutunu çalıştırırken tablo verileri yeni bir geçici tabloya kopyalanır; bu durum kümenin depolama alanı kullanımını geçici olarak artırır.

  • Tam metin dizini olmayan tablolar için OPTIMIZE TABLE deyimi Online DDL kullanılarak yürütülür ve eşzamanlı okuma/yazma işlemlerini destekler.

  • Büyük tablolarda OPTIMIZE TABLE işlemini çalıştırmak ani G/Ç ve arabellek kullanım sıçramalarına neden olur; bu da tablo kilitlerine ve kaynak çekişmesine yol açabilir. Bu işlemi yoğun saatlerde çalıştırmak küme kullanılamazlığına ve izleme boşluklarına neden olabilir. Bu işlemi yoğun olmayan saatlerde çalıştırmanızı öneririz.

Yöntemlerin karşılaştırılması

Gerçek iş senaryonıza göre uygun geri kazanma yöntemini seçebilirsiniz.


Yöntem


Eşzamanlı okuma/yazma


Hız


Hız sınırlama


Kullanım durumu


OPTIMIZE TABLE komutu


Evet


Hızlı


Hayır


İş yükünün hafif olduğu ve yürütme verimliliğinin öncelikli olduğu durumlarda, OPTIMIZE TABLE komutu tablo alanını hızla geri kazanarak depolama ek yükünü azaltır.


DMS tablo alanı geri kazanma


Evet


Yavaş


Evet


Küme iş yükünün hassas olduğu ve yürütme verimliliğinin öncelikli olmadığı durumlarda, DMS aracı iş operasyonları üzerinde minimal etkiyle tablo alanını geri kazanır.

Prosedür

OPTIMIZE TABLE kullanarak tablo alanını geri kazanma

Tablo alanını geri kazanmak için aşağıdaki komutu kullanabilirsiniz.

OPTIMIZE TABLE [Database1].[Table1],[Database2].[Table2]
Not
  • [Database1] ve [Database2] veritabanı adlarıdır; [Table1] ve [Table2] ise tablo adlarıdır.

  • InnoDB motorunda OPTIMIZE TABLE komutunu çalıştırırken Table does not support optimize, doing recreate + analyze instead mesajı döndürülür. Bu normal bir yanıttır. Bu mesajı göz ardı edebilir ve ok yanıtının döndürüldüğünü doğrulayabilirsiniz. OPTIMIZE TABLE deyimi hakkında daha fazla bilgi için bkz. OPTIMIZE TABLE Statement.

DMS tablo alanı geri kazanma

  1. Veritabanında oturum açın: PolarDB konsolu adresine gidin, hedef kümenin Basic Information sayfasını tıklayın ve DMS üzerinden PolarDB for MySQL kümesinde oturum açmak için sağ üst köşedeki Log on to Database düğmesini tıklayın.

  2. Tablo alanını geri kazanın: Sol gezinme bölmesinde hedef küme kimliğini seçin, hedef veritabanına çift tıklayın, herhangi bir tablo adına sağ tıklayın ve ardından Batch Operations On Tables öğesini seçin. Batch Operations On Tables sayfasında alanını serbest bırakmak istediğiniz tabloları seçin ve ardından Table Maintenance>Optimize Table seçeneklerini tıklayın.

Günlük dosyalarını temizleyin

PolarDB for MySQL kümeleri, büyük işlem işleme nedeniyle Binlog, Redo logları veya Undo loglarını hızla oluşturabilir; bu durum aşırı depolama alanı tüketimine veya depolamanın dolmasına neden olabilir. Bu durumda, önce depolama kapasitesini genişletmenizi ve ardından günlük dosyalarının hızlı oluşumunun nedenini araştırmanızı öneririz.

Not

Binlog, Undo logları veya Redo loglarını temizlerken konsolun güncellemeleri yansıtması biraz zaman alabilir. Lütfen sabırla bekleyin.

Binlog

PolarDB for MySQL kümelerinde Binlog varsayılan olarak devre dışıdır ve bunun yerine daha gelişmiş fiziksel günlük (Redo Log) kullanılır. Kümeniz için Binlog etkinleştirilmemişse Redo log ve Undo log temizleme bölümlerine bakın.

Alıkoyma ilkesi

Binlog dosyaları için aşağıdaki alıkoyma ilkeleri geçerlidir:

  • Binlog etkinleştirildiğinde dosyalar varsayılan olarak 3 gün boyunca saklanır. 3 günden eski dosyalar otomatik olarak silinir.

    Not
    • 23 Kasım 2023 tarihinden önce satın alınan PolarDB for MySQL kümeleri için varsayılan Binlog alıkoyma süresi iki haftadır (14 gün).

    • 17 Ocak 2024 tarihinden önce satın alınan PolarDB for MySQL kümeleri için varsayılan Binlog alıkoyma süresi bir haftadır (7 gün).

  • Binlog devre dışı bırakıldıktan sonra mevcut Binlog dosyaları süresiz olarak saklanır ve otomatik olarak silinmez.

    Not

    Binlog dosyalarını silmek için Binlog etkin durumdayken Binlog alıkoyma süresi parametresini (loose_expire_logs_hours veya binlog_expire_logs_seconds) küçük bir değere ayarlamanız gerekir. Dosyaların süresi dolduktan ve otomatik olarak silindikten sonra Binlog'u devre dışı bırakabilirsiniz.

Alıkoyma süresini değiştirin

Önemli
  • Binlog alıkoyma süresini değiştirmek bağlantı kopmalarına neden olmaz veya kümenin yeniden başlatılmasını gerektirmez.

  • Alıkoyma süresini değiştirmek çok sayıda Binlog dosyasının temizlenmesine neden oluyorsa (örneğin 10 TB), temizleme işlemi sırasında kısa süreli veritabanı yazma hataları oluşabilir. Bu nedenle, Binlog dosyaları büyük olduğunda bu işlemi yoğun olmayan saatlerde yapmanızı ve her seferinde Binlog verilerinin bir kısmını temizleyerek Binlog alıkoyma süresini kademeli olarak kısaltmanızı öneririz.

  • Temizlenen Binlog dosyaları silindikten sonra kurtarılamaz.

Binlog alıkoyma süresini aşağıdaki gibi değiştirebilirsiniz:

  • MySQL 5.6: Binlog alıkoyma süresini ayarlamak için loose_expire_logs_hours parametresini (değer aralığı: 0 ila 2376, saat cinsinden, varsayılan değer: 72) değiştirebilirsiniz. 0 değeri, Binlog dosyalarının otomatik olarak silinmediği anlamına gelir.

  • MySQL 5.7MySQL 8.0: Binlog alıkoyma süresini ayarlamak için binlog_expire_logs_seconds parametresini (değer aralığı: 0 ila 4294967295, saniye cinsinden, varsayılan değer: 259200) değiştirebilirsiniz. 0 değeri, Binlog dosyalarının otomatik olarak silinmediği anlamına gelir.

Geçmiş dosyaları temizleyin

Binlog alıkoyma süresi parametresini (loose_expire_logs_hours veya binlog_expire_logs_seconds) değiştirdikten sonra kümedeki geçmiş Binlog dosyaları hemen temizlenmez. Geçmiş dosyaları temizlemek için aşağıdaki üç yöntemden birini kullanabilirsiniz:

  • Otomatik temizlemeyi bekleyin: Kümedeki son Binlog dosyası maksimum depolama boyutuna (parametre max_binlog_size) ulaştığında sistem yeni bir Binlog dosyasına geçer ve bu geçmiş Binlog dosyaları otomatik olarak temizlenir.

  • Manuel temizleme: Ayrıcalıklı bir hesap kullanarak flush binary logs komutunu çalıştırın; bu işlem Binlog dosyası geçişini hemen tetikler ve süresi dolmuş Binlog dosyalarını temizler.

  • Kümeyi yeniden başlatın: Küme yeniden başlatıldığında sistem geçmiş Binlog dosyalarını otomatik olarak temizler.

Undo logları

PolarDB for MySQL Undo logları, çok sürümlü eşzamanlılık kontrolünde (MVCC) geçmiş sürümler olarak görev yapar. Commit edilmemiş işlemler (salt okunur düğümlerde veya okuma/yazma düğümlerinde) eski okuma görünümlerini tuttuğunda undo log temizleme işlemi engellenir ve bu durum sürekli alan birikimine neden olur.

Commit edilmemiş işlemleri belirleyin ve sonlandırın

  1. Veritabanında oturum açın: PolarDB konsolu adresine gidin, hedef kümenin Basic Information sayfasını tıklayın ve DMS üzerinden PolarDB for MySQL kümesinde oturum açmak için sağ üst köşedeki Log on to Database düğmesini tıklayın.

  2. Commit edilmemiş işlemleri bulun: Uzun süredir devam eden commit edilmemiş işlemleri kontrol etmek için aşağıdaki komutu çalıştırın.

    SELECT * FROM INFORMATION_SCHEMA.innodb_trx;

    trx_started (işlem başlangıç zamanı) önemli ölçüde eski olan veya trx_state (işlem durumu) uzun bir süre boyunca RUNNING durumunda kalan işlemlere odaklanın. trx_mysql_thread_id (iş parçacığı kimliği) değerini kaydedin.

  3. İşlemi sonlandırın: İşinizin etkilenmeyeceğini doğruladıktan sonra hedef işlemi sonlandırmak için KILL komutunu çalıştırın.

    kill [Thread ID];

Temizleme ilerlemesini izleyin

İşlemlere karşılık gelen iş parçacıklarını temizledikten sonra mevcut Undo history ilerlemesini kontrol etmeniz gerekir. Undo history uzunluğu hızla artmaya devam ediyorsa arka plan temizleme (purge) performansını ayarlamanız gerekir.

Not

Yazma baskısı yüksek olduğunda PolarDB stratejisi mevcut yazma performansına öncelik verir. Bu durum undo log temizlemesinin geride kalmasına neden olabilir.

  1. Temizleme ilerlemesini izleyin: Undo history uzunluğunu gözlemlemek için aşağıdaki komutu çalıştırın.

    SELECT COUNT FROM INFORMATION_SCHEMA.innodb_metrics WHERE name = 'trx_rseg_history_len';

    Değer 1 milyonu aşarsa veya mevcut baskı gerçekten yüksekken birkaç dakika boyunca yükselmeye devam ederse temizleme hızı yazma hızına yetişemez.

  2. Temizleme parametrelerini ayarlayın: Temizleme verimliliğini artırın.

    1. Her temizleme toplu işinin daha büyük olması için innodb_purge_batch_size parametresini artırın.

    2. Daha fazla temizleme iş parçacığı eklemek için innodb_purge_threads parametresini artırın. Bu değeri küme teknik özelliklerindeki CPU çekirdek sayısına ayarlamanızı öneririz.

      Not

      Bu işlem kümeyi yeniden başlatır. Yoğun olmayan saatlerde yapmanızı öneririz.

İşgal edilen alanı geri kazanın

Undo history uzunluğu azalıp stabilize olduktan sonra undo logları tarafından işgal edilen alanı temizlemek istiyorsanız Undo truncate özelliğini etkinleştirebilirsiniz.

  • Özelliği etkinleştirin: innodb_undo_log_truncate parametresini ON olarak ayarlayın.

  • Tetikleyici mekanizma: Tek bir undo dosyası innodb_max_undo_log_size değerini aştığında Undo truncate işlemi tetiklenir.

  • Sürüm sınırlamaları: Bazı önceki sürümlerde Undo truncate ile ilgili bilinen hatalar bulunmaktadır. Kümenizde bu parametrenin değiştirilmesine izin verilmiyorsa en son küçük sürüme yükseltmeniz gerekir.

  • Hemen devre dışı bırakın: Bu özellik, küme yük devretme ve yeniden başlatma işlemleri sırasında ek yük getirir. Alan geri kazanma tamamlandıktan hemen sonra bu parametreyi tekrar OFF olarak ayarlamanızı öneririz; özellikle en son küçük sürüme yükseltme gibi bakım işlemlerinden önce. Bu özelliği yalnızca gerektiğinde etkinleştirin.

Redo logları

PolarDB for MySQL kümeleri, birincil düğüm ile salt okunur düğümler arasındaki veri senkronizasyonu için Binlog yerine Redo loglarını kullanır.

  • Günlük yedeklemeleri olmadan yerel Redo logları 2 GB ila 11 GB arasında depolama alanı kaplar ve maksimum 11 GB'a ulaşabilir. Buna arabellek havuzundaki 8 Redo logu (8 GB), yazılan Redo logu (1 GB), önceden oluşturulan Redo logları (1 GB) ve son Redo logu (1 GB) dahildir.

  • Günlük yedeklemeleri ile yerel Redo logları, yedekleme tamamlandıktan sonra yaklaşık bir saat boyunca saklanır. Yazma hızı yüksekse (örneğin 35 MB/s'yi aşarsa) geçici Redo log birikimi oluşabilir.

Temizleme kuralları

Redo logları manuel temizlemeyi desteklemez. Günlük yedeklemesi tamamlandıktan sonra otomatik olarak temizlenir ve manuel müdahale gerektirmez.

Not

PolarDB konsolunda kümenin günlük yedekleme ilkesini (varsayılan: 7 gün) PolarDB konsolu üzerinden ayarlayabilirsiniz.

Geçici dosyaları temizleyin

PolarDB for MySQL kümeleri, karmaşık sorgular veya büyük işlemler nedeniyle çok sayıda geçici dosya oluşturabilir; bu durum aşırı depolama tüketimine veya depolamanın dolmasına neden olabilir. Bu durumda error: 1114 The table '/home/mysql/log/tmp/#sqlxxx_xxx_xxx' is full gibi hata mesajları görünebilir.

Bu durumu aşağıdaki yöntemlerden biriyle ele alabilirsiniz:

Oturumları sonlandırın

Çok sayıda Copy to tmp table veya Sending data mesajı içeren oturumları sonlandırın.

  1. Veritabanında oturum açın: PolarDB konsolu adresine gidin, hedef kümenin Basic Information sayfasını tıklayın ve DMS üzerinden PolarDB for MySQL kümesinde oturum açmak için sağ üst köşedeki Log on to Database düğmesini tıklayın.

  2. Oturum durumunu görüntüleyin: Oturum durumunu görüntülemek için aşağıdaki komutu çalıştırın.

    SHOW PROCESSLIST;
  3. Hedef oturumu bulun: DMS'de sorgu sonuçlarında State sütununa tıklayarak verileri sıralayın ve çok sayıda Copy to tmp table veya Sending data mesajı olup olmadığını kontrol edin. Oturum kimliğini kaydedin.

  4. Oturumları sonlandırın: Hedef oturumu sonlandırmak için aşağıdaki komutu çalıştırın.

    kill [Session ID];
    Önemli

    Bir oturumu sonlandırmadan önce çalışan iş operasyonlarını etkilemeyeceğinden emin olun.

Yukarıdaki adımlar yeterli depolama alanı serbest bırakmazsa geçici dosyalar tarafından işgal edilen depolama alanını serbest bırakmak için kümedeki her bir düğümü yeniden başlatabilirsiniz.

Parametreleri ayarlayın

PolarDB konsolu adresine gidin, Settings and Management > Parameters sayfasına gidin ve geçici tablo alanı boyutunu artırmak için tmp_table_size ve max_heap_table_size parametrelerini değiştirin.

SSS

DELETE komutunu çalıştırdıktan sonra depolama alanı neden azalmıyor?

DELETE yalnızca kayıt konumlarını veya veri sayfalarını dahili olarak yeniden kullanılabilir olarak işaretler ve fiziksel dosya boyutunu azaltmaz. Bu durum büyük miktarda parçalı alana neden olur. Bu parçalı alanı tamamen geri kazanmak için tablo üzerinde yoğun olmayan saatlerde OPTIMIZE TABLE komutunu çalıştırmanız gerekir.