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.
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.
NotPolarDB 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.

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

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.
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.
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 TABLEkomutunu çalıştırmak tablespace boyutunu önemli ölçüde azaltmayabilir. Hedef tablonun parçalanma oranını kontrol etmek içinDATA_FREEgörünümündekiinformation_schema.tablesalanını kontrol edebilirsiniz.OPTIMIZE TABLEkomutunu ç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 TABLEdeyimi Online DDL kullanılarak yürütülür ve eşzamanlı okuma/yazma işlemlerini destekler.Büyük tablolarda
OPTIMIZE TABLEiş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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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]
[Database1]ve[Database2]veritabanı adlarıdır;[Table1]ve[Table2]ise tablo adlarıdır.InnoDB motorunda
OPTIMIZE TABLEkomutunu çalıştırırkenTable does not support optimize, doing recreate + analyze insteadmesajı döndürülür. Bu normal bir yanıttır. Bu mesajı göz ardı edebilir veokyanıtının döndürüldüğünü doğrulayabilirsiniz.OPTIMIZE TABLEdeyimi hakkında daha fazla bilgi için bkz. OPTIMIZE TABLE Statement.
DMS tablo alanı geri kazanma
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.
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.
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.
Not23 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.
NotBinlog dosyalarını silmek için Binlog etkin durumdayken Binlog alıkoyma süresi parametresini (
loose_expire_logs_hoursveyabinlog_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
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_hoursparametresini (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_secondsparametresini (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 logskomutunu ç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
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.
-
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 veyatrx_state(işlem durumu) uzun bir süre boyuncaRUNNINGdurumunda kalan işlemlere odaklanın.trx_mysql_thread_id(iş parçacığı kimliği) değerini kaydedin. -
İş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.
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.
-
Temizleme ilerlemesini izleyin:
Undo historyuzunluğ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.
-
Temizleme parametrelerini ayarlayın: Temizleme verimliliğini artırın.
Her temizleme toplu işinin daha büyük olması için
innodb_purge_batch_sizeparametresini artırın.-
Daha fazla temizleme iş parçacığı eklemek için
innodb_purge_threadsparametresini artırın. Bu değeri küme teknik özelliklerindeki CPU çekirdek sayısına ayarlamanızı öneririz.NotBu 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_truncateparametresini ON olarak ayarlayın.Tetikleyici mekanizma: Tek bir undo dosyası
innodb_max_undo_log_sizedeğerini aştığındaUndo truncateişlemi tetiklenir.Sürüm sınırlamaları: Bazı önceki sürümlerde
Undo truncateile 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.
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.
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.
-
Oturum durumunu görüntüleyin: Oturum durumunu görüntülemek için aşağıdaki komutu çalıştırın.
SHOW PROCESSLIST; Hedef oturumu bulun: DMS'de sorgu sonuçlarında
Statesütununa tıklayarak verileri sıralayın ve çok sayıdaCopy to tmp tableveyaSending datamesajı olup olmadığını kontrol edin. Oturum kimliğini kaydedin.-
Oturumları sonlandırın: Hedef oturumu sonlandırmak için aşağıdaki komutu çalıştırın.
kill [Session ID];ÖnemliBir 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, 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.