Ne yazık ki, 100 satırlık küçük gruplar halinde kopyalama bile bir süre sonra önemli bir gecikme yaratır.
Her toplu iş arasında herhangi bir gecikme ekliyor musunuz, yoksa yalnızca güncellemeleri topluyor ve her toplu işi bir öncekinden hemen sonra mı çalıştırıyorsunuz?
Öyleyse, dönüşümü en sevdiğiniz dilde aşağıdaki gibi bir komut dosyası oluşturmayı deneyin:
repeat
copy oldest 100 rows that haven't been copied yet to new table
sleep for as long as that update took
until there are <100 rows unprocessed
stop logging service
move the last few rows
rename tables
restart logging
delete the old table when you are sure the conversion has worked
Bu, dönüşümün, sistemin kullanımı zamana göre değiştiği için uygulanan yük farklılıklarına izin vermesine rağmen sunucunuzun kapasitesinin yarısından fazlasını almamasını sağlamalıdır.
Eğer veritabanı ihtiyacı olan kullanıcılar için bazı işler yapmak zaman hizmet nispeten boştayken mümkün olduğunca zaman olarak kullanabilir ama (potansiyel olarak zaman oldukça uzunluk için duraklatma) geri çekilmesini istiyorsanız Veya, yerini sleep for as long as the update took
ile if the server's load is above <upper measure>, sleep for some seconds then check again, loop around the sleep/check until the load drops below <lower measure>
. Bu, sessiz zamanlarda ilerleyebileceği anlamına gelir, ancak sunucu normal iş yükünü gerçekleştirmekle meşgul olduğunda tamamen duraklar. Yükün belirlenmesi işletim sisteminize bağlı olacaktır - Linux altında ve buna benzer 1 dakikalık yük ortalama değeri /proc/loadavg
veya çıkışının yapılması uptime
gerekir. <lower measure>
ve <upper measure>
aynı değer olabilir, ancak bunun gibi kontrollerde bir fark olması olağandır, bu nedenle işleminiz başlamaya devam etmez ve yük ölçümü üzerinde etkisi olan kendi yeniden başlatması nedeniyle hemen duraklamaz.
Tabii ki bu, eski satırların değiştirilebileceği tablolar için işe yaramaz, ancak tanımladığınız gibi bir günlük tablosu için iyi çalışır.
Bu durumda yeni tabloyu doldurduktan sonra dizin oluşturma bilgeliğini göz ardı etmek isteyeceksiniz . İşlerin olabildiğince hızlı olmasını istediğinizde bu gerçekten daha verimli olsa da (sistemin geri kalanı üzerindeki etki lanetlenir), bu durumda işlemin sonunda büyük yük bolluğunu istemezsiniz. dizinler tek seferde tamamen oluşturulur, çünkü işler meşgul olduğunda duraklayamayacağınız bir işlemdir.