Mysql Anlayamadığım Bir Durum
-
Herkese selamlar,
Mysql 5.6 InnoDB tablo yapısı ile ortalama 20 milyon, 50 milyon, 10 milyonluk 3 ayrı veri tabanı mevcut.
Bu veri tabanlarından özellikle 20 ve 10 milyonluk olanlarda yüksek oranda SELECT, UPDATE ve INSERT kullanılmakta(Anlık 1k sorgu görebiliyor yerine göre). Tüm sorguların hızlı olması için de gereken Varchar sütunlarında indexleme yapılmış durumda. Ve sistem gayet stabil sorunsuz şekilde çalışıyor. Kaynak tüketimi de oldukça düşük durumda, işlemci %10'larda, SSD kullanımı 10 MB civarında ortalama.
Ancak birkaç gündür sistemde mevcut tabloya yeni sütun eklemeye çalışınca sistem bi kasılıyor mevcut performansı etkilemeyecek şekilde ama sütun eklenmiyor. Yine aynı şekilde bir sütunu silmeye kalkınca yine bi kasıyor kendisini ama netice yok. Yani sistem çalışmasına devam ediyor ancak bu işlemleri yapmıyor.
Nedir ne değildir, bilgisi fikri olan var mıdır ?
-
Bu kadar yüksek veri sahibi olan vt ler üzerinde hiç çalışmadım ancak bunun mantığı günlük o 1k sorgunun anlamı şudur ki sen her dakika sorgu falan alıyosun yani eğer bu işlemler, sorgular devam ederken sütun ekleyip silmeye çalışırsan kasması normal diye düşünüyorum. Sütun ekleme veya silme yaparken feys gibi maintence kullansan ya :)
-
Büyük verilerde çalışan ustalar biraz yol gosterse iyi olur. Mesela maintance kullanımı gibi.
cidden lazım performans odaklı şeyler.
-
Claw bunu yazdı
Bu kadar yüksek veri sahibi olan vt ler üzerinde hiç çalışmadım ancak bunun mantığı günlük o 1k sorgunun anlamı şudur ki sen her dakika sorgu falan alıyosun yani eğer bu işlemler, sorgular devam ederken sütun ekleyip silmeye çalışırsan kasması normal diye düşünüyorum. Sütun ekleme veya silme yaparken feys gibi maintence kullansan ya :)
Hocam günlük değil anlık öyle sorgu :) sistem gerçekten güzel hiç sorun çıkarmıyor. Ancak bende yeni yeni büyük vt üzerinde uğraşmaya başladım, sorguları kesiyorum bu işlemleri yaparken kapatıyorum sistemi zaten ama yine bir halt olmuyor :)
Hayır siliyorum silinmiyor, oluşturuyorum oluşturmuyor. Ama SQL komutunu verdikten sonra sistemin işlem yaptığını görüyorum yani kaynak kullanımı artıyor MYSQL'in.
-
Sütun eklemeye phpmyadminden yapmaya çalışıyorsan timeouta düşmesi çok normal. Sütun ekleme işlemini mysql consoledan yaparsan sorun çıkmamalı. Biraz kıvranır veritabanı, I/O oranın tavan yapar ama çok sürmemeli. Eğer çok sürüyorsa yapabiliyorsan veritabanına tüm erişimi kesip tek tek tüm tabloları optimize etmen. Ardından tekrar denemen sonuç getirecektir.
-
milyonluk derken tek bir tabloda 20 milyon kayıt mı mevcut ?
-
S2buyuk bunu yazdı
Sütun eklemeye phpmyadminden yapmaya çalışıyorsan timeouta düşmesi çok normal. Sütun ekleme işlemini mysql consoledan yaparsan sorun çıkmamalı. Biraz kıvranır veritabanı, I/O oranın tavan yapar ama çok sürmemeli. Eğer çok sürüyorsa yapabiliyorsan veritabanına tüm erişimi kesip tek tek tüm tabloları optimize etmen. Ardından tekrar denemen sonuç getirecektir.
Tmp kullanımı %100 oluyor, o yüzden onu optimize edip , akabinde direkt mysql konsoldan deneyeceğim birazdan,
@snnyk hocam bir tabloda 15 diğer tabloda 5 milyon civarı var, diğer vt'lerde de benzer durum var.
-
hocam
öncelikle mysql workbench ile denemeni tavsiye ederim
mümkünse test serverde dene önce yok ise sistemin en az kullanıldığı saatlerde bi maintenance çakıp dene
oda olmassa artık tek çare bulk load yani record to record
onuda mysql commit , unique vs. kapatıp row row yeni bir tabloya insert etmen lazım
-
snnyk bunu yazdı
hocam
öncelikle mysql workbench ile denemeni tavsiye ederim
mümkünse test serverde dene önce yok ise sistemin en az kullanıldığı saatlerde bi maintenance çakıp dene
oda olmassa artık tek çare bulk load yani record to record
onuda mysql commit , unique vs. kapatıp row row yeni bir tabloya insert etmen lazım
+1 katılıyorum. İkinci önereceğim yöntem de bu olacaktı. Autocommit i kapatıp birsürü insert sorgusu haline çevireceksin. İşlem bittikten sonra commit deyip yola devam ediceksin. Sunucu bakım moduna girmeden yapma bunu iyice zortlatırsın.
-
Hocam büyük tablolarda yeni bir kolon ekleme, index ekleme gibi işlemlerde yeni tablo oluşturup veriyi ona taşımak genelde önerilen bir yöntemdir (özellikde MongoDB'de). Autocommit konusunda eğer bu işi başka bir dille yapacaksan C#, Java'da Transaction ile gönderirken belirli aralıklarla commit gerçekleştirirsen sunucunun RAM'i şişmez ve MySQL patlamaz aklında bulunsun.
-
Çok sağolun yardım ve fikirleriniz için.
Bahsettiğiniz gibi yeni tabloya taşımak çok daha mantıklı bir çözüm oldu.
Tekrardan teşekkürler herkese :)