13 puan yazan GN⁺ 2024-12-23 | 3 yorum | WhatsApp'ta paylaş
  • SQLite, diskte B-ağacı yapısında saklanan satır tabanlı bir depodur ve sorguları çalıştırmak için VDBE adlı bir sanal makine kullanır. Platformdan bağımsızdır ve tek iş parçacığıyla neredeyse her ortamda çalışabilir.
  • Genel amaçlı bir veritabanı olmasına rağmen OLTP iş yüklerinde çok güçlüdür. 2015'te Buffalo Üniversitesi araştırmacıları, sorguların çoğunun basit anahtar-değer aramaları ve karmaşık OLAP sorguları olduğunu ortaya koydu.
  • Wisconsin-Madison Üniversitesi araştırmacıları, analitik sorguları daha hızlı hale getirmek için çalıştı. Performansı DuckDB ve Star Schema Benchmark (SSB) ile karşılaştırdılar.

Neden

  • SQLite'ın neden yavaş olduğunu anlamak için VDBE_PROFILE seçeneği kullanılarak VDBE'deki her komutun tükettiği CPU çevrimleri ölçüldü.
  • SeekRowID ve Column adlı iki opcode'un başlıca neden olduğu ortaya çıktı.

Veritabanı birleştirmeleri

  • Veritabanlarının join işlemlerini uygulama yöntemleri arasında iç içe döngü birleştirmesi, hash join ve sort-merge join bulunur.
  • SQLite en basit yöntem olan "iç içe döngü birleştirmesi"ni kullanır. Bu, B-ağacı aramasına benzediği için maliyetlidir.

Join optimizasyonunun önemi

  • Join işlemlerinde tabloların sırası önemlidir. Sıra değiştirildiğinde işlem sayısı büyük ölçüde azaltılabilir. Bu, NP-zor bir problemdir.
  • İç içe döngü birleştirmesinden daha iyi iki join algoritması vardır, ancak hash join çok bellek tüketir ve SQLite çoğunlukla bellek kısıtlı ortamlarda çalışır.
  • Araştırmacılar, alan verimliliğini artırmak ve CPU cache line'ına sığmasını sağlamak için Bloom filtresi kullandı. Filter ve FilterAdd adlı iki opcode eklendi.

Sonuç

  • Optimizasyondan sonra CPU çevrimi analizindeki büyük mavi çubuklar neredeyse tamamen kayboldu.
  • SQLite 7 ila 10 kat hızlandı. Bu araştırma sonucu SQLite v3.38.0'a uygulandı.
  • Bloom filtresi, çok düşük bellek ek yüküyle SQLite'ın basit yapısına iyi uyuyor ve mevcut sorgu motoru içinde çalışıyor

3 yorum

 
porteleaf 2024-12-24

Sürüme şimdi baktım, benim sistemim 3.42.0 kullanıyormuş. Şu an itibarıyla en güncel sürüm 3.47.2.

 
halfenif 2024-12-24

Sanırım şu anda kullandığım SQLite sürümünü kontrol etmem gerekecek.

Aslında bundan da öte, openpyxl kullanarak Excel dosyaları oluşturuyorum ama çok zaman alıyor; bu yüzden başka bir kütüphane olup olmadığına bakmam gerekecek.

 
savvykang 2024-12-24

Önce profil çıkarma yapmanız daha iyi olmaz mı?