Beberapa literatur tentang kompresi data SQL Server yang saya baca menyatakan bahwa biaya penulisan meningkat menjadi sekitar empat kali lipat dari yang biasanya diperlukan. Tampaknya juga menyiratkan bahwa ini adalah kelemahan utama untuk kompresi data, sangat menyiratkan bahwa untuk database arsip read-only, kinerja akan (dengan beberapa pengecualian) ditingkatkan dengan penggunaan kompresi data dari 100% halaman yang diisi.
- Apakah pernyataan di atas benar?
Apa "variasi" utama antara kompresi data dan cara lainnya (untuk membaca)
- "CPU + x%"?
- "IO -y%"?
- terjadinya pemisah halaman?
- penggunaan tempdb?
- Penggunaan RAM?
- Dan untuk menulis?
Untuk keperluan pertanyaan ini, Anda dapat membatasi konteks ke kompresi tingkat PAGE dari database besar (> 1TB) , tetapi komentar tambahan selalu diterima.
Referensi:
SQL Server Storage Engine Blog (Skenario DW menunjukkan kompresi menjadi sangat menguntungkan)
Kompresi Data: Strategi, Perencanaan Kapasitas dan Praktik Terbaik
Pendekatan yang lebih rinci untuk memutuskan apa yang akan dikompres melibatkan analisis karakteristik beban kerja untuk setiap tabel dan indeks. Ini didasarkan pada dua metrik berikut:
U: Persentase operasi pembaruan pada tabel, indeks, atau partisi tertentu, relatif terhadap total operasi pada objek itu. Semakin rendah nilai U (yaitu, tabel, indeks, atau partisi jarang diperbarui), kandidat yang lebih baik untuk kompresi halaman.
S: Persentase operasi pemindaian pada tabel, indeks, atau partisi, relatif terhadap total operasi pada objek itu. Semakin tinggi nilai S (yaitu, tabel, indeks, atau partisi sebagian besar dipindai), semakin baik kandidat untuk kompresi halaman.
Kedua hal di atas jelas-jelas bias terhadap rekomendasi kompresi halaman untuk database gaya DW (baca-intensif / eksklusif, operasi big-data).
Jawaban:
Hanya 2 sen saya dari eksperimen saya sendiri di perangkat keras berusia 1-2 tahun:
Operasi hanya baca (pemindaian gaya DW, sortir dll.) Pada tabel terkompresi-halaman (~ 80 baris / halaman) Saya telah menemukan titik impas dengan pengurangan ukuran kompresi ~ 3x.
Yaitu jika tabel cocok dengan memori, kompresi halaman hanya menguntungkan kinerja jika ukuran data telah menyusut lebih dari 3x. Anda memindai lebih sedikit halaman dalam memori, tetapi butuh lebih lama untuk memindai setiap halaman.
Saya kira jarak tempuh Anda mungkin berbeda-beda jika rencana Anda bersarang-seret dan berat. Antara lain, ini juga akan tergantung pada perangkat keras (penalti akses simpul NUMA asing, kecepatan memori, dll.).
Di atas hanyalah aturan praktis yang saya ikuti, berdasarkan pengujian saya sendiri menggunakan pertanyaan saya sendiri pada perangkat keras saya sendiri (Dell Poweredge 910 dan yang lebih muda). Itu bukan Injil, eh!
Sunting: Kemarin presentasi SQLBits XI yang sangat baik dari Thomas Kejser dibuat tersedia sebagai video. Cukup relevan dengan diskusi ini, ini menunjukkan wajah 'jelek' biaya CPU untuk kompresi halaman - pembaruan diperlambat oleh 4x, kunci diadakan untuk sedikit lebih lama.
Namun , Thomas menggunakan penyimpanan FusionIO dan dia memilih meja yang hanya 'memenuhi syarat' untuk kompresi halaman. Jika penyimpanan menggunakan SAN biasa dan data menggunakan kompresi 3x-4x maka gambar mungkin kurang dramatis.
sumber
Saya dapat menambahkan beberapa kata dari lingkungan Gudang Data saya.
Menerapkan kompresi (PAGE dalam kasus saya) di atas meja uji dengan 30 juta baris (18GB) mengurangi ukuran tabel dari 18GB menjadi 3GB! (efisiensi penyimpanan pasti) tetapi menambah waktu buka (tulis) dari 22 menjadi 36 menit.
Jadi untuk membaca atau membaca dan menempatkan data dalam memori itu bisa menjadi solusi yang baik tetapi untuk memuat data harian itu dapat menyebabkan penurunan kinerja.
sumber