Geçici dosyalar bir ApsaraDB RDS for MySQL örneğinin depolama alanını tamamen tükettiğinde, sistem veri kaybını önlemek için örneği otomatik olarak kilitler. Bu konuda, bu durumun neden ortaya çıktığı, örneğin kilidinin nasıl açılacağı ve sorunun tekrar yaşanmaması için alınabilecek önlemler açıklanmaktadır.
Örnek neden kilitlenir?
MySQL, verileri sıralama, gruplama ve tabloları ilişkilendirme gerektiren SQL deyimlerini yürüttüğünde geçici dosyalar birikir. Büyük işlemlere ait ikili günlük (binlog) önbellek dosyaları da işlemler devam ederken ve henüz commit edilmemişken depolama alanı tüketir.
Depolama alanı tükendiğinde, sistem veri kaybını önlemek amacıyla RDS örneğini otomatik olarak kilitler ve bu durumda RDS örneğine veri yazamazsınız.
Örneğin kilidini açma
Aşağıdaki seçenekleri sırayla uygulayın. Örnek kilitten kurtulduğu anda işlemi durdurun.
Seçenek 1: Depolama kapasitesini genişletin
Örneğin depolama kapasitesini genişletin. Genişletme işleminden sonra sistem, yaklaşık 5 dakika içinde örneğin kilidini otomatik olarak açar. Ayrıntılar için bkz. ApsaraDB RDS for MySQL örneğinin teknik özelliklerini değiştirme.
Seçenek 2: Geçici dosyaları serbest bırakmak için örneği yeniden başlatın
Depolama alanının genişletilmesi mümkün değilse, örneğin MySQL ana sürümüne bağlı olarak aşağıdaki yöntemlerden birini kullanın:
MySQL 5.6: Geçici tablo alanı ibdata1 sistem tablo alanında bulunur. Örneği yeniden başlatma işlemi geçici dosyaları serbest bırakmaz. Birincil ve ikincil düğümlerin ibdata1 boyutlarını karşılaştırın. İkincil düğüm daha küçük bir ibdata1 boyutuna sahipse, yüksek kullanılabilirlik (HA) yük devretme işlemi gerçekleştirin ve ardından alanı serbest bırakmak için orijinal ikincil düğümü yeniden oluşturun. Her iki düğüm de büyük bir ibdata1 boyutuna sahipse yeni bir örnek oluşturun ve verileri geçirmek için DTS kullanın.
MySQL 5.7: Geçici tablo alanı bağımsız ibtmp1 dosyasında bulunur. Örneği yeniden başlatma işlemi geçici dosyaları serbest bırakır. Yüksek kullanılabilirliğe sahip örnekler için birincil ve ikincil düğümlerin ibtmp1 boyutlarını karşılaştırın. İkincil düğüm daha küçük bir ibtmp1 boyutuna sahipse HA yük devretme işlemi gerçekleştirin ve ardından alanı serbest bırakmak için orijinal ikincil düğümü yeniden başlatın. ibtmp1 boyutunu 10 GB ile sınırlamak için
innodb_temp_data_file_pathparametresiniibtmp1:12M:autoextend:max:10Golarak ayarlayabilirsiniz. Bu değişikliğin etkili olması için örneğin yeniden başlatılması gerekir.MySQL 8.0 ve 8.4: Örnek kilitlendiğinde tüm kullanıcı oturumları sonlandırılır. Oturumlar sonlandırıldıktan sonra otomatik olarak geri alma (rollback) işlemine başlar. Geri alma süresi, çalışmakta olan sorgulara bağlıdır. İşlem geri alma tamamlandığında örnek depolama alanı serbest kalır.
innodb_temp_data_file_path parametresi, geçici tablo alanı dosyasının boyutunu ve genişletme davranışını kontrol eder. MySQL 5.7 ve 8.0 tarafından desteklenir ve varsayılan değeri ibtmp1:12M:autoextend şeklindedir. MySQL 5.6 bu parametreyi desteklemez.
Büyük tablolar üzerinde yapılan DDL işlemleri (örneğin dizin ekleme) sıralama geçici dosyaları oluşturur. Varsayılan olarak bu dosyaların boyut sınırı yoktur ve sınırsız büyüyebilirler. Bu tür işlemleri çalıştırmadan önce örnekte yeterli depolama alanı bulunduğundan emin olun.
If the Restart Instance button on the Basic Information page is dimmed, use this workaround:
Go to the Instances page. In the top navigation bar, select the region where the instance resides, then click the instance ID.
In the left-side navigation pane, click Parameters.
On the Editable Parameters tab, find any parameter that shows Yes in the Force Restart column, and change its value.
Seçenek 3: Soruna neden olan oturumu belirleyip sonlandırın
Yeniden başlatmadan sonra örnek hâlâ kilitliyse, geçici dosya üreten oturumu belirleyin ve sonlandırın.
Data Management (DMS) kullanarak örneğe bağlanın.
-
Aktif oturumları listelemek için aşağıdaki deyimi çalıştırın:
show processlist Sonuçları State sütununa göre sıralayın. State sütununda Copy to tmp table veya Sending data gösteren oturumları arayın; bunlar yoğun geçici dosya kullanımına işaret eder. Soruna neden olan oturumun ID değerini not edin.
-
Oturumu sonlandırın:
kill [$ID];Replace
[$ID]with the session ID from the previous step.ÖnemliBir oturumu sonlandırmadan önce, bu işlemin çalışan hizmetleri etkilemeyeceğinden emin olun.
Sorunun tekrar yaşanmasını önleme
Örneğin kilidi açıldıktan sonra sorunun tekrarlanmaması için aşağıdaki adımları uygulayın.
Otomatik depolama genişletmeyi etkinleştirin
Configure automatic storage expansion so the system expands storage automatically when usage approaches the threshold. For details, see ApsaraDB RDS for MySQL örneği için otomatik depolama genişletmeyi yapılandırma.
Geçici dosya üreten SQL deyimlerini optimize edin
Belirli bir SQL deyiminin geçici tablo kullanıp kullanmadığını kontrol etmek için EXPLAIN çalıştırın ve Extra sütununu inceleyin. Using temporary ifadesi görünüyorsa, bu deyim bir geçici tablo oluşturur.
explain select * from alarm group by created_on order by default;
Geçici dosya kullanımını azaltmak için:
Sorguları, büyük sonuç kümeleri üzerinde sık ORDER BY ve GROUP BY kullanmaktan kaçınacak şekilde yeniden yazın.
Tam tablo sıralamalarından kaçınmak için uygun dizinler ekleyin.
You can increase the values of
tmp_table_sizeandmax_heap_table_sizebased on your business requirements. However, this method is not recommended because memory resources are more important than disk resources.
Büyük işlemlerden kaynaklanan geçici depolama alanını azaltın
Büyük işlemler devam ederken binlog önbellek dosyalarını diske yazar. Bunu azaltmak için:
Büyük toplu işlemleri daha küçük işlemlere bölün.
Birden çok bağlantıda paralel olarak birden fazla büyük işlem çalıştırmaktan kaçının.
Geçici dosyaların kapladığı depolama alanını azaltmak için büyük işlemlerde kısa ömürlü bağlantılar kullanın.
You can increase the value of
binlog_cache_sizebased on your business requirements. However, we recommend that you do not use this method.
Disk kullanımını izleyin
Disk kullanımını %80'in altında tutun. Depolama alanı tükenmeden önce gereksiz verileri silebilmeniz veya büyük veri kümelerini bölebilmeniz için izleme uyarıları kurun.
Sonraki adımlar
Örneğin kilidini açmak için geçici dosyaları kaldıramıyorsanız, diğer dosya türlerini kaldırarak disk kullanımını azaltın. Aşağıdaki konulara bakın: