Apakah kompresi data SQL Server baik untuk database hanya baca?


11

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.

  1. Apakah pernyataan di atas benar?
  2. Apa "variasi" utama antara kompresi data dan cara lainnya (untuk membaca)

    • "CPU + x%"?
    • "IO -y%"?
    • terjadinya pemisah halaman?
    • penggunaan tempdb?
    • Penggunaan RAM?
  3. 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).


Literatur apa khusus? Akan selalu ada overhead CPU untuk kedua kompres / uncompress tetapi, seperti dengan membaca, Anda menulis ke jumlah halaman yang lebih sedikit juga. Bahkan saya akan berpikir sisi penulisan akan mendapat manfaat lebih dari sisi baca karena sisi baca sering memiliki halaman terkompresi yang tersimpan dalam memori (ini tidak selalu, tetapi kasus terbaik tergantung pada ukuran data dan memori yang dialokasikan).
Aaron Bertrand

3
Akan sangat sulit untuk menyediakan salah satu metrik yang Anda minta karena sepenuhnya bergantung pada sifat data dan kemampuan untuk mengompresnya (dan ini akan berbeda tergantung pada baris vs halaman, juga ). Beberapa orang telah melaporkan rasio kompresi hingga 90% yang akan berdampak pada penggunaan memori (dengan cara positif) dan CPU untuk melakukan kompresi sebanyak itu. Kertas ini ballparks CPU overhead pada 10% untuk kompresi baris dan lebih tinggi untuk halaman . Apa yang Anda amati mungkin sangat berbeda.
Aaron Bertrand

1
Untuk database arsip read-only, saya kira pertanyaannya adalah apakah itu bisa muat di memori. Jika semuanya bisa masuk dalam memori maka setelah dimuat ke dalam buffer pool tidak ada manfaat nyata untuk dikompres. Namun, jika itu tidak semua bisa masuk ke dalam memori, Anda mungkin masih melihat beberapa manfaat dalam menukar lebih sedikit halaman dari dan keluar dari cache meskipun akan ada pekerjaan yang dilakukan tanpa mengompresnya.
Aaron Bertrand

Tak satu pun dari tautan yang Anda tambahkan tampaknya menyebutkan hukuman 4x ini untuk menulis. Apakah Anda ingat di mana Anda mengambilnya? Ingin melihat konteksnya.
Aaron Bertrand

1
Nah, jika Anda tidak dapat memasukkan data ke dalam memori daripada skenario itu semacam diperdebatkan, bukan? :-)
Aaron Bertrand

Jawaban:


6

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.


1
Bisakah itu menjadi perangkat keras lama? Pada perangkat keras baru, bare SSD Untuk penyimpanan, saya menemukan core tidak dapat mengikuti disk dengan mudah. Saya juga tahu manfaatnya akan mulai LOT lebih mudah - pengurangan 50% dalam IO sangat berharga ketika tidak melakukan banyak perubahan.
TomTom

TomTom, Storage tidak ikut berperan untuk angka-angka ini. Perbandingannya adalah antara tables-in-memory tidak terkompresi dan tables-in-memory terkompresi.
John Alan

Belum pernah melihat DWH yang cukup baik untuk memori. Serius. Anda AKAN kembali ke disk.
TomTom

1
Ya tentu saja Anda kadang-kadang akan kembali ke disk - membaca dari disk adalah di mana kompresi halaman hampir selalu memiliki keunggulan (dengan asumsi data cukup kompresif!). Tetapi jika beban kerja Anda dimuat dari disk sekali dan kemudian memanipulasi semua yang ada di memori untuk sisa hari itu - berapa banyak berat yang akan Anda berikan untuk pembacaan disk dan berapa banyak untuk operasi di dalam memori?
John Alan

1
Baru saja menemukan slide presentasi yang relevan dari SQLBits 2013 oleh Thomas Kejser: slideshare.net/fusionio/…
John Alan

0

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.