2011-05-20 11 views
5

Sevgili diğer geliştiriciler, bazı sebeplerden dolayı 1720 kayıtlarının güncellemeleri SSD diskte yaklaşık 15 saniye sürüyor (özellikle kırpma etkinken).sqlite güncellemeleri SSD diskte yavaş (1520 kayıt için 15 saniye)

I (iyi çalışıyor) şu dokümanı http://web.utk.edu/~jplyon/sqlite/SQLite_optimization_FAQ.html

ben performansını optimize etmek için aşağıdaki Pragma en seti var ve güncellemeleri tam kümesi etrafında işlemleri kullanmak DO kullanarak sqlite ayarları uğraştık.

sqlite3_exec(database, "PRAGMA cache_size=500000;", nil, nil, nil); 
sqlite3_exec(database, "PRAGMA synchronous=OFF", nil, nil, nil); 
sqlite3_exec(database, "PRAGMA count_changes=OFF", nil, nil, nil); 
sqlite3_exec(database, "PRAGMA temp_store=MEMORY", nil, nil, nil); 

O SSD sadece 1720 basit kayıtları güncelleme için 15 saniye engellemek yapar (silme blokları ve böyle benzeri) çok fazla yapıyor gibi görünüyor.

Tuhaf bir şekilde: 2500 kayıt eklemek neredeyse anında. Bana yardımcı olabilir ve bunu nasıl düzelteceğimi gösteren bazı işaretçiler verebilir misiniz?

cevap

5

Bazı eski testler yaparak ve denemekle cevabı buldum. Bir işlemde birbirinden sonra birçok UPDATE ifadesi yaparken sqlite TRIM ile SSD'lerde donacak gibi görünüyor.

Şimdi kodu değiştirdim: a) bir komut hazırlayın ve güncelleştirilecek tüm kayıtlar için bu komutu yeniden kullanın. b) COMMIT ve BEGIN her 1500 kayıtta yeni bir işlem

, bu, donma sqlite olarak düzeltilmiş gibi görünüyor. Kısacası: Hazırlanan sql deyimini yeniden kullanın ve işlemin çok büyük olmadığından emin olun.