Apakah data diambil dari Microsoft SQL Server terkompresi? Jika ini dikendalikan oleh string koneksi, apakah ada cara sederhana untuk mengetahui apakah ada aplikasi tertentu yang menggunakannya?
Saya sedang memeriksa alat analisis, dan volume data dapat memakan waktu beberapa menit untuk mengirimkan melalui jaringan kami. Saya bertanya-tanya apakah saya harus mengharapkan peningkatan kinerja jika kita menarik data dari penyimpanan data terkompresi pada server jarak jauh yang sama.
Selama kita berada di topik, saya ingin tahu: apakah data ditransmisikan dalam biner atau ASCII? Misalnya, jika nilainya 12345
ditanya dari INT
kolom , apakah nilainya ditransmisikan sebagai lima byte 0x31, 0x32, 0x33, 0x34, 0x35; dua byte yang diperlukan untuk nilainya; atau empat byte seperti yang diperlukan untuk kolom?
Untuk lebih jelasnya, saya mengerti bahwa ada beberapa opsi tentang menyimpan data dengan kompresi, dan mencadangkannya. Saya bertanya tentang bagaimana data dikirimkan.
sumber
Jawaban:
Data yang ingin Anda kompres adalah yang dikirim melalui kabel melalui TDS . Ada beberapa kompresi kecil di sini tetapi tidak jauh dari jenis kompresi yang Anda dapatkan dengan kompresi halaman / baris, kompresi cadangan, atau kompresi ColumnStore.
Telah ditanyakan sebelumnya:
http://connect.microsoft.com/SQLServer/feedback/details/412131/enable-network-compression-compress-tds-stream
http://connect.microsoft.com/SQLServer/feedback/details/377479/wan-compression-option
Barang masih terbuka, jadi mungkin ada harapan. Tidak ada cara untuk mengontrol ini melalui koneksi string yang pernah saya lihat.
Sementara itu ada beberapa produk yang mengklaim melakukan ini, misalnya
http://www.nitrosphere.com/products/nitroaccelerator/
http://toonel.net/tcpany.htm
Anda juga dapat berpotensi mengkonfigurasi jaringan antara SQL Server dan server aplikasi untuk mendukung kompresi (dan hal-hal lain seperti enkripsi) tetapi Anda berada di luar jangkauan saya di sini, dan saya tidak yakin apakah ini akan didukung oleh setiap fitur SQL Server.
Dan jujur saja, saya tidak yakin ini adalah tempat yang ingin Anda fokuskan untuk mengoptimalkan. Mengompresi aliran ini mungkin sebenarnya memperlambat segalanya dan lebih besar daripada manfaat mengirim byte lebih sedikit. Saya lebih suka memungut uang pada konektivitas jaringan yang lebih baik antara server dan klien daripada menghabiskan waktu berinvestasi dalam jenis pekerjaan ini dan menguji apakah itu memiliki manfaat aktual - dan tidak dapat melakukan itu sampai sesudahnya. Dari 10/100 ke gig serat memiliki dampak yang diketahui dan dapat diprediksi pada jaringan I / O.
Saya tidak yakin tentang format byte yang dikirim melalui kabel; Anda harus mengatur semacam sniffer paket untuk itu (atau mungkin seseorang telah melakukan itu dan akan berpadu).
Mengenai dampak kompresi, kecuali jika Anda menggunakan Fusion-IO atau solusi tipe SSD high-end lainnya, Anda hampir pasti terikat I / O saat ini, dan tidak terikat CPU. Jadi selama Anda memiliki overhead CPU, Anda akan melihat kinerja yang lebih cepat dengan kompresi diaktifkan (tetapi ini tidak akan mengubah kinerja jaringan , karena data tidak terkompresi sebelum transmisi). Saya mengatakan bahwa tidak mengetahui apa-apa tentang server Anda, aplikasi Anda, data Anda atau pola penggunaan Anda - Anda bisa saja memiliki kasus tepi di mana kompresi benar-benar merusak kinerja, atau di mana data itu bukan kandidat yang baik untuk rasio kompresi yang baik.
sumber
Secara teknis, hasil dapat dikompresi sangat sedikit .
Tabular Data Stream (TDS) 7.3B — pertama kali didukung oleh SQL Server 2008 R2 — memperkenalkan sesuatu yang disebut kompresi bitmap nol yang memungkinkan baris yang berisi banyak null ditransmisikan menggunakan byte lebih sedikit daripada yang biasanya dibutuhkan oleh nilai bidang nol.
Server dapat mencampurkan baris reguler dengan baris terkompresi bitmap nol saat ia memilih saat mengirimkan hasil. Klien tidak memiliki kendali atas ini sehingga tidak ada opsi konfigurasi sisi-klien yang relevan tersedia.
Bitmap kosong adalah satu-satunya bentuk kompresi yang saat ini didukung oleh TDS. Jika suatu baris tidak dikompresi dengan bitmap nol, ia dikirim tanpa kompresi.
Kolom dengan tipe data non-teks ditransmisikan menggunakan format biner yang ditentukan oleh protokol TDS .
sumber
Seperti disebutkan di tempat lain , untuk mengatasi masalah ini Anda dapat mempertimbangkan pengaturan VPN dan mengaktifkan kompresi.
sumber
Mengapa tidak menyiapkan contoh SQL lokal yang menyimpan data dan sinkronisasi yang relevan setiap n jam? Hal lain untuk dilihat adalah precompute the cubes dan memiliki tombol 'get details' ketika Anda mencapai sel ringkasan. Itu kemudian akan mengambil baris rinci yang relevan saja.
sumber