Bir RDS örneği Locking durumuna geçtiğinde INSERT ve UPDATE deyimleri başarısız olur. Bu konu, kilitlenmenin nedenlerini, her birinin çözüm yöntemlerini ve tekrarlanmasını önleme adımlarını açıklar.
Kilitlenme davranışını anlama
Locking durumunun etkileri, veritabanı altyapısı sürümüne ve küçük altyapı sürümüne bağlı olarak değişir.
MySQL 5.6, 5.7 ve 8.0 (küçük altyapı sürümü 20190815 veya sonrası)
ApsaraDB RDS, kilitlenmenin nedenine göre işlemleri sınırlamak için üç kilit türü kullanır:
| Kilit türü | Neyi engeller | Tetikleyici koşul |
|---|---|---|
LOCK_WRITE_GROWTH |
Disk kullanımını artıran işlemler (INSERT, UPDATE). Okuma sorguları çalışmaya devam eder. DELETE, disk kullanımını artıran ikili günlükler oluşturduğu için alan boşaltmak amacıyla bunun yerine DROP veya TRUNCATE kullanın. | Birincil örnek depolaması doludur. |
LOCK_READ |
Tüm okuma ve yazma işlemleri. | Salt okunur örnek depolaması doludur. |
LOCK_WRITE |
DROP ve TRUNCATE dahil tüm yazma işlemleri (LOCK_WRITE_GROWTH kısıtlamalarının üst kümesi). |
Örnek süresinin dolması, bir ApsaraDB MyBase kümesindeki ana bilgisayar süresinin dolması veya örnek geçişi. |
LOCK_WRITE_GROWTH etkin olduğunda SQL deyimleri aşağıdaki hatayı döndürür:
ERROR 1290 (HY000): The MySQL server is running with the LOCK_WRITE_GROWTH option so it cannot execute this statement
MySQL 5.1, 5.5 ve küçük altyapı sürümü 20190815'ten önceki MySQL 5.6/5.7/8.0
Kilitlenmenin nedeninden bağımsız olarak tüm işlemler engellenir.
Nedeni teşhis etme
RDS örneğinizin Basic Information sayfasında Usage Statistics bölümünü kontrol edin. İki olası neden şunlardır:
Neden 1: Depolama kapasitesi tükendi.
Neden 2: Alibaba Cloud hesabınızda ödemesi gecikmiş tutarlar bulunuyor veya RDS örneğinin süresi doldu.

Neden 1'i çözme: depolama kapasitesi tükendi
İki seçenek vardır: depolama kapasitesini genişletmek veya depolama alanını serbest bırakmak. Depolamayı genişletmek daha hızlıdır ve veri silmeyi gerektirmez.
Seçenek 1: depolama kapasitesini genişletme (önerilen)
Instances sayfasına gidin. Üst gezinme çubuğunda örneğin bulunduğu bölgeyi seçin, ardından örnek kimliğine tıklayın.
Basic Information sayfasında Configuration Information bölümüne gidin ve depolama kapasitesini genişletmek için Change Specifications öğesine tıklayın.
Ödemeyi tamamlayın. Basic Information sayfasının sağ üst köşesindeki
simgesine tıklayarak Tasks sayfasından ilerlemeyi izleyin.
Gerekli süre depolama türüne göre değişir:
| Depolama türü | Süre | Notlar |
|---|---|---|
| Premium Yerel SSD'ler | Değişken | Örnekler arası veri geçişi gerçekleşebilir. Yaklaşık 30 saniyelik geçici bir bağlantı kesintisi beklenir. Yoğun olmayan saatlerde genişletin ve uygulamanızın otomatik olarak yeniden bağlandığından emin olun. |
| Bulut diskleri | Yaklaşık 5 dakika | MySQL ve PostgreSQL: geçici bağlantı kesintisi yok. SQL Server: yaklaşık 30 saniyelik geçici bir bağlantı kesintisi oluşabilir. Yoğun olmayan saatlerde genişletin veya uygulamanızın otomatik olarak yeniden bağlandığından emin olun. Belirli RDS örnekleri, veri kaybı olmadan depolama kapasitesi genişletmeyi destekler. Bu işlem iş yüklerinizi kesintiye uğratmaz. |
Genişletmeden sonra örnek kimliği ve bağlantı dizesi değişmez. Ancak, Premium Yerel SSD'lerin genişletilmesi örnekler arası veri geçişini tetiklediğinde IP adresi değişebilir. IP adresi yerine bağlantı dizesini (alan adını) kullanarak örneğe bağlanın.
Alternatif olarak ApsaraDB RDS konsoluna oturum açabilir ve sol gezinme bölmesinde Task Center seçeneğine tıklayarak ilerlemeyi görüntüleyebilirsiniz.
Seçenek 2: depolama alanını serbest bırakma
Herhangi bir şeyi silmeden önce verilerinizi yedekleyin. Veri kaybını önlemek için mümkünse bunun yerine depolamayı genişletin.
Instances sayfasına gidin. Bölgeyi seçin, ardından örnek kimliğine tıklayın.
-
Sol gezinme bölmesinde Monitoring and Alerts seçeneğine tıklayarak depolama kullanımını veri türüne göre ayrılmış şekilde görüntüleyin.

En fazla alanı tüketen depolama kategorisine göre verileri silin.
Geçici dosyalar (temp_file_size ölçümü)
ApsaraDB RDS for MySQL, sıralama, gruplama veya birleştirme işlemleri için geçici tablolar ve büyük işlemleri taahhüt etmeden önce ikili günlük önbellek dosyaları oluşturur. Bu geçici dosyalar disk alanını tüketebilir.
Çözüm adımları için bkz. Geçici dosyalar nedeniyle depolama kapasitesi tükenen bir ApsaraDB RDS for MySQL örneği Locked durumundaysa ne yapmalıyım?
Günlük dosyaları (binlog_size ve general_log_size ölçümleri)
| Veritabanı altyapısı | Çözüm |
|---|---|
| MySQL | Monitoring and Alerts sayfasında depolama kullanımını görüntüleyin, ardından günlük dosyalarını silin. Bkz. Bir ApsaraDB RDS for MySQL örneğinin depolama kapasitesi ikili günlük dosyaları nedeniyle tükendiyse ne yapmalıyım? ve ApsaraDB RDS for MySQL genel sorgu günlüğü özelliği hakkında SSS. |
| PostgreSQL | Günlük dosyaları manuel olarak silinemez. AliPG'nin WAL günlüklerini otomatik olarak kaldırmasına olanak tanımak için etkin olmayan çoğaltma yuvalarını silin. Bkz. Bir ApsaraDB RDS for PostgreSQL örneği için WAL günlük yönetimi özelliğini kullanma. |
| SQL Server | Günlük dosyaları manuel olarak silinemez. Bunun yerine ApsaraDB RDS konsolunda işlem günlüklerini küçültün. |
Veri dosyaları (user_data_size ölçümü)
MySQL:
-
En büyük tabloları bulmak için aşağıdaki deyimi çalıştırın:
SELECT TABLE_NAME, concat(round((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024,2),'MB') AS DATA FROM information_schema.TABLES WHERE TABLE_SCHEMA = '<Database name>' ORDER BY DATA + 0 DESC; -
Gereksiz tabloları bırakın:
DROP TABLE <Table name>; Sistemin örneğin kilidini açması için yaklaşık 5 dakika bekleyin.
PostgreSQL:
-
DMS kullanarak RDS örneğinize bağlanın. Bkz. Bir ApsaraDB RDS örneğinde oturum açmak için DMS kullanma.
Bağlanamıyorsanız önce depolama kapasitesini genişletin, disk alanını temizleyin, ardından gerektiğinde depolama kapasitesini azaltın. Bkz. Örnek teknik özelliklerini değiştirme .
-
En büyük tabloları bulmak için aşağıdaki deyimi çalıştırın:
SELECT table_schema || '.' || table_name AS table_full_name, pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') AS size FROM information_schema.tables ORDER BY pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') DESC; -
Gereksiz tabloları bırakın:
DROP TABLE <Table name>; Sistemin örneğin kilidini açması için yaklaşık 5 dakika bekleyin.
SQL Server:
Bir ApsaraDB RDS for SQL Server örneğindeki yetersiz depolama sorunlarını giderme konusundaki adımları izleyin.
Sistem dosyaları (undolog_size ölçümü)
InnoDB tablolarında uzun süre çalışan sorgular ve büyük eşzamanlı veri değişiklikleri, sistemin aşırı geri alma günlükleri oluşturmasına ve depolama kapasitesinin tükenmesine neden olabilir.
Çözüm adımları için bkz. Sistem dosyası birikmesinden kaynaklanan yetersiz depolama alanını giderme.
Neden 2'yi çözme: ödemesi gecikmiş tutarlar veya örnek süresinin dolması
Abonelik örneği: Örneği yenileyin, ardından yaklaşık 5 dakika bekleyin ve örneğin Running durumunda olup olmadığını kontrol edin.
Kullandıkça öde örneği: Alibaba Cloud hesabınıza bakiye yükleyin, ardından 5 dakika bekleyin ve örneğin Running durumunda olup olmadığını kontrol edin.
Gelecekteki kilitlenmeleri önleme
Beklenmeyen kilitlenmelerden kaçınmak için aşağıdakileri yapılandırın:
Ödeme ve sona erme bildirimlerini ayarlama:
ApsaraDB RDS konsolunda oturum açın.
Message Center öğesini açmak için sağ üst köşedeki
simgesine tıklayın.Sol gezinme bölmesinde Common Settings seçeneğine tıklayın.
Notification Type sütununda Product Overdue Payment, Suspension, and Imminent Release Notifications seçeneğini belirleyin ve Modify seçeneğine tıklayın.
Uyarı kişilerini seçin ve Save seçeneğine tıklayın.
Depolama kullanımı uyarısı yapılandırma: depolama kullanımı için uyarı kuralları ayarlayın ve depolama kullanımı %90'ı aştığında bir uyarı tetikleyin.
SQL Explorer ve Audit'i etkinleştirme: SQL Explorer ve Audit özelliğini etkinleştirin. Depolama kullanımı ani artış gösterirse Monitoring and Alerts sayfasında artış sırasında yürütülen SQL deyimlerini sorgulayın ve optimize edin.
Otomatik depolama genişletmeyi etkinleştirme: Depolama azaldığında sistemin kapasiteyi genişletmesi için otomatik depolama genişletmeyi yapılandırın. MySQL, PostgreSQL ve SQL Server kılavuzlarına bakın.
SQL deyimlerini optimize etme: Büyük veri kümelerini işleyen sorgularda ORDER BY ve GROUP BY yan tümcelerinin sık kullanılmasından kaçının; çünkü bunlar büyük geçici dosyalar oluşturur.
SSS
Büyük miktarda veri sildikten sonra neden LOCK_WRITE_GROWTH hala etkin?
DELETE çalıştırmak kayıtları yeniden kullanılabilir olarak işaretler ancak altta yatan disk dosyalarını küçültmez veya tablo alanını geri almaz. Tablo alanını serbest bırakmak için OPTIMIZE TABLE deyimini kullanın. Bkz. Bir ApsaraDB RDS for MySQL örneğinin tablo alanını serbest bırakmak için OPTIMIZE TABLE deyimi nasıl kullanılır?
Depolama yeterli olsa veya örneğin süresi yenilenmiş olsa bile örneğim neden hala kilitli?
Yapılandırma değişikliği gibi bir görev halen devam ediyor. Görev tamamlandığında örneğin kilidi otomatik olarak açılır. Basic Information sayfasının sağ üst köşesindeki
simgesine tıklayarak Tasks sayfasındaki görev ilerlemesini kontrol edin.
Disk kullanımı zaten %100'ün altına düştüyse ancak örnek hala kilitliyse ve devam eden bir görev yoksa bu beklenen bir durumdur: kilidin açılması anında gerçekleşmez. Süreç üç aşamadan geçer: periyodik bir algılama döngüsü disk kullanımını kontrol eder, kullanımın %100'ün altında olduğunu bir kontrol onayladığında bir kilit açma görevi gönderilir ve ardından kilit açma görevi çalışır. Örnek, disk kullanımı %100'ün altına düştükten sonra genellikle 10 dakika içinde otomatik olarak kilit açılır.
Örnek Locking durumundayken örnek teknik özelliklerini değiştirebilir miyim?
Örnek depolama tükendiği için kilitlendiyse evet; teknik özellikleri yükseltebilir veya düşürebilirsiniz. Ödemesi gecikmiş tutarlar gibi diğer nedenlerle kilitlendiyse önce ödeme sorununu çözün.
Örneğim kullanımdan kaldırılmış bir örnek türü kullanıyor. Depolamayı genişleterek kilidi nasıl açarım?
Önce örnek türünü mevcut bir örnek türüyle değiştirin, ardından depolamayı genişletin. Mevcut örnek türleri için bkz. Birincil ApsaraDB RDS örnek türleri.
Örnek kilitli olsa bile depolama kullanımı neden artmaya devam ediyor?
INSERT ve UPDATE engellenir ancak okuma sorguları depolama kullanımını artıran günlük dosyaları veya geçici veriler oluşturabilir.