Apakah data diambil dari SQL Server yang dikompres untuk transmisi?

20

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 12345ditanya dari INTkolom , 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.

Jon dari Semua Perdagangan
sumber
Kompresi adalah mekanisme internal. Halaman dikompres pada disk dan di buffer pool tetapi aliran byte reguler pada kawat. @ShawnMelton telah menulis blog tentang mengendus format kawat sebelumnya dan mudah-mudahan akan merespons dengan highlight.
Mark Storey-Smith
Apa yang saya tulis lebih fokus pada apakah itu dienkripsi. Saya bisa memilih data yang saya tarik dalam format yang dapat dibaca, meskipun saya tidak mencoba nilai integer. Satu-satunya cara untuk mengetahui dengan pasti hanyalah pengaturan dan coba saja: mssqltips.com/sqlservertip/2436/…
Shawn Melton
@ MarkStorey-Smith: Jadi jawabannya adalah "tidak", data tidak dikompresi? Itu memalukan, tetapi itu membantu menjelaskan mengapa pertanyaan besar ini bisa begitu lama untuk dikirim. Sepertinya saya perlu cache yang secara fisik lebih dekat. Jika Anda ingin menjadikan itu jawaban yang sebenarnya, saya akan menerimanya.
Jon of All Trades
@ShawnMelton: Itu kedengarannya seperti cara yang tepat untuk melakukannya, saya hanya tidak memiliki latar belakang jaringan yang cukup untuk sampai ke lapisan yang tepat dan percaya diri dengan apa yang saya lihat. Untungnya bagi saya ada orang dengan lebih banyak keterampilan dan lebih banyak waktu di tangan mereka!
Jon of All Trades

Jawaban:

16

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.

Aaron Bertrand
sumber
Sudah pasti jaringan itulah masalahnya, setidaknya saat mentransmisikan 10-an MB. Saya dapat meminta data dalam hitungan detik pada server itu sendiri dalam RDP, tetapi server tersebut secara fisik terletak di luar negara, dan dengan demikian menyalin data ke komputer di lokasi bisnis - dengan operasi file sederhana atau dengan menanyakan dari komputer lokal kepada saya - butuh beberapa menit.
Jon of All Trades
Jadi mungkin Anda harus mereplikasi, mirror, atau sesuatu yang lain, dan meminta data secara lokal dari salinan. Dengan begitu latensi tidak dirasakan oleh pengguna akhir. Cara Anda melakukan pendekatan ini tergantung pada seberapa segar data perlu. Dan juga apakah Anda benar-benar membutuhkan pengguna akhir untuk meminta 10s MB data sekaligus.
Aaron Bertrand
Persis. Kecuali kita bisa mendapatkan server BI dipindahkan. Mengenai volume data, penggunaannya adalah untuk analisis (menggunakan QlikView, ATM), data bertahun-tahun dan banyak dimensi dan fakta. File berkisar hingga 100 MB dengan kompresi, dan itu hanya untuk beberapa tahun data!
Jon of All Trades
@JonofAllTrades Dimaksudkan dengan niat terbaik ... sepertinya Anda mencoba menyelesaikan masalah yang salah, dengan solusi yang salah.
Mark Storey-Smith
@ MarkStorey-Smith: Apa alternatifnya? Ada banyak data, dan aksesnya lambat di WAN kami. Seperti yang disebutkan Harun, beberapa jenis cache lokal akan membantu. Menebang volume data yang dikirimkan akan mengurangi ruang lingkup analisis pengguna, yang mengalahkan tujuan penemuan data visual.
Jon of All Trades
4

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?

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.

Selama kita berada di topik, saya ingin tahu: apakah data ditransmisikan dalam biner atau ASCII?

Kolom dengan tipe data non-teks ditransmisikan menggunakan format biner yang ditentukan oleh protokol TDS .

Ben Gribaudo
sumber
2

Seperti disebutkan di tempat lain , untuk mengatasi masalah ini Anda dapat mempertimbangkan pengaturan VPN dan mengaktifkan kompresi.

Seperti yang orang lain katakan tidak ada kompresi yang dibangun ke dalam SQL Server TDS Protocol. Perlu juga dikatakan bahwa secara default tidak ada enkripsi juga. Untuk mengaktifkan enkripsi, Anda harus menggunakan sertifikat dan menentukannya dalam string koneksi.

Solusi termudah untuk menyelesaikan kedua masalah adalah dengan membuka terowongan VPN dengan enkripsi dan kompresi diaktifkan. Microsoft PPTP sederhana memecahkan kedua masalah dan mudah diatur.

jocull
sumber
1

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.

Ishwar
sumber
Kalimat pertama Anda sangat mirip dengan komentar ini .
Aaron Bertrand