Memory Dioptimalkan Tabel - dapatkah mereka benar-benar sangat sulit untuk dipertahankan?


18

Saya sedang menyelidiki manfaat pemutakhiran dari MS SQL 2012 hingga 2014. Salah satu nilai jual besar SQL 2014 adalah tabel yang dioptimalkan memori, yang tampaknya membuat kueri super cepat.

Saya telah menemukan bahwa ada beberapa batasan pada tabel yang dioptimalkan memori, seperti:

  • Tidak ada (max)bidang berukuran
  • Maksimal ~ 1KB per baris
  • Tanpa timestampbidang
  • Tidak ada kolom yang dihitung
  • Tidak ada UNIQUEkendala

Ini semua memenuhi syarat sebagai gangguan, tetapi jika saya benar-benar ingin bekerja di sekitar mereka untuk mendapatkan manfaat kinerja, saya dapat membuat rencana.

Penendang sesungguhnya adalah kenyataan bahwa Anda tidak dapat menjalankan ALTER TABLEpernyataan, dan Anda harus melalui omong kosong ini setiap kali Anda menambahkan bidang ke INCLUDEdaftar indeks. Selain itu, tampaknya Anda harus menutup pengguna dari sistem untuk membuat perubahan skema ke tabel MO pada DB langsung.

Saya menemukan ini benar-benar keterlaluan, sejauh saya benar-benar tidak percaya bahwa Microsoft dapat menginvestasikan begitu banyak modal pengembangan ke fitur ini, dan membiarkannya begitu tidak praktis untuk dipertahankan. Ini membawa saya pada kesimpulan bahwa saya pasti mendapatkan ujung tongkat yang salah; Saya pasti salah paham tentang tabel yang dioptimalkan memori yang membuat saya percaya bahwa jauh lebih sulit untuk mempertahankannya daripada yang sebenarnya.

Jadi, apa yang saya salah pahami? Sudahkah Anda menggunakan tabel MO? Apakah ada semacam saklar atau proses rahasia yang membuatnya praktis untuk digunakan dan dipelihara?

Jawaban:


18

Tidak, di dalam memori ini benar-benar tidak dipoles. Jika Anda terbiasa dengan Agile, Anda akan tahu konsep "produk minimal yang dapat dikirim"; dalam memori adalah itu. Saya mendapatkan perasaan bahwa MS membutuhkan tanggapan terhadap SAP Hana dan sejenisnya. Inilah yang bisa mereka debug dalam jangka waktu untuk rilis 2014.

Seperti hal lain dalam memori memiliki biaya dan manfaat yang terkait dengannya. Manfaat utama adalah throughput yang bisa dicapai. Salah satu biaya adalah overhead untuk manajemen perubahan, seperti yang Anda sebutkan. Ini tidak menjadikannya produk yang tidak berguna, menurut saya, itu hanya mengurangi jumlah kasus di mana ia akan memberikan keuntungan bersih. Sama seperti indeks kolom toko sekarang dapat diperbarui dan indeks dapat difilter, saya tidak ragu bahwa fungsionalitas dalam memori akan meningkat seiring rilis yang akan datang.


SQL Server 2016 sekarang umumnya tersedia. Seperti yang saya duga, OLTP dalam Memori telah menerima sejumlah peningkatan. Sebagian besar perubahan menerapkan fungsi yang dinikmati tabel tradisional selama beberapa waktu. Dugaan saya adalah bahwa fitur-fitur masa depan akan dirilis pada waktu yang sama untuk tabel in-memory dan tradisional. Tabel temporal adalah contoh kasus. Baru dalam versi ini didukung oleh In-Memory dan tabel berbasis disk .


14

Salah satu masalah dengan teknologi baru - terutama rilis V1 yang telah diungkapkan cukup keras sebagai fitur-tidak lengkap - adalah bahwa semua orang melompat pada kereta musik dan menganggapnya cocok untuk setiap beban kerja. Ini bukan. Sweet spot Hekaton adalah beban kerja OLTP di bawah 256 GB dengan banyak pencarian titik pada 2-4 soket. Apakah ini cocok dengan beban kerja Anda?

Banyak keterbatasan yang berkaitan dengan tabel dalam memori yang dikombinasikan dengan prosedur yang disusun secara asli. Anda tentu saja dapat melewati beberapa batasan ini dengan menggunakan tabel dalam memori tetapi tidak menggunakan prosedur yang dikompilasi secara asli, atau setidaknya tidak secara eksklusif.

Jelas Anda perlu menguji apakah perolehan kinerja itu substansial di lingkungan Anda , dan jika ya, apakah pengorbanan itu sepadan. Jika Anda mendapatkan peningkatan kinerja yang luar biasa dari tabel di memori, saya tidak yakin mengapa Anda khawatir tentang berapa banyak pemeliharaan yang akan Anda lakukan pada kolom TERMASUK. Indeks dalam memori Anda secara definisi meliputi. Ini seharusnya hanya sangat membantu untuk menghindari pencarian pada jangkauan atau pemindaian penuh indeks tradisional yang tidak berkerumun, dan operasi ini tidak benar-benar seharusnya terjadi dalam tabel dalam memori (sekali lagi, Anda harus membuat profil beban kerja Anda dan melihat operasi mana yang membaik dan yang tidak - tidak semuanya win-win). Seberapa sering Anda muck dengan kolom TERMASUK pada indeks Anda hari ini?

Pada dasarnya, jika belum layak untuk Anda dalam bentuk V1, jangan gunakan itu. Itu bukan pertanyaan yang bisa kami jawab untuk Anda, kecuali untuk memberi tahu Anda bahwa banyak pelanggan yang mau hidup dengan keterbatasan, dan menggunakan fitur itu untuk keuntungan besar terlepas dari itu.

SQL Server 2016

Jika Anda sedang menuju SQL Server 2016, saya telah membuat blog tentang peningkatan yang akan Anda lihat di OLTP Dalam Memori, serta penghapusan beberapa batasan . Terutama:

  • Peningkatan ukuran meja maksimum tahan lama: 256 GB => 2 TB
  • LOB / MAX kolom, indeks pada kolom nullable, penghapusan persyaratan pemeriksaan BIN2
  • Ubah & kompilasi ulang prosedur
  • Beberapa dukungan untuk ALTER TABEL - ini akan offline tetapi Anda harus dapat mengubah dan / atau menjatuhkan / membuat kembali indeks (ini tampaknya tidak didukung pada CTP build saat ini, jadi jangan anggap ini sebagai jaminan)
  • Pemicu DML, batasan FK / periksa, MARS
  • ATAU, BUKAN, DALAM, ADA, BERBEDA, UNION, OUTER JOINs
  • Paralelisme

Saya menggunakan kolom "sertakan" sebagai contoh perubahan sepele yang mungkin harus saya buat, tetapi sekarang saya telah belajar dari Anda bahwa ini bukan contoh yang baik. Yang lebih relevan adalah, misalnya, menambahkan kolom nullable baru, yang merupakan tindakan yang sangat tidak mengganggu dalam tabel konvensional, tetapi akan sangat memberatkan tabel MO. Karena sistem yang sedang kami kerjakan terus berkembang (permintaan fitur kami bersaing dalam jumlah dengan laporan bug), ini mungkin menjadi pembunuh bagi kami.
Shaul bilang aku Dukung Monica

3
@ Shaul ok, jadi jangan gunakan itu. Atau hanya menaruh tabel stabil di memori. Atau pertimbangkan desain berbeda tempat Anda menambahkan kolom (EAV) secara konstan. Seperti itu, saya pikir Anda hanya mengoceh bahwa teknologi ini bukan untuk Anda. Saya punya anak jadi saya tidak mengeluh bahwa Porsche Cayman S tidak praktis untuk saya - atau paling tidak sebagai pengemudi harian. Mungkin saya bisa menggunakannya di akhir pekan (sama seperti mungkin Anda bisa menggunakan OLTP dalam memori untuk bagian skema Anda, tetapi tidak semuanya). Fakta bahwa Anda memiliki persyaratan yang tidak umum, dan yang bertentangan dengan fitur V1, bukan kesalahan Microsoft.
Aaron Bertrand

Aaron, apa itu EAV?
Shaul bilang aku Dukung Monica


2

Anda tidak dapat mengklik kanan tabel yang dioptimalkan memori, untuk menarik desainer , dan menambahkan kolom baru sesuka Anda, dari dalam Sql Server Management Studio. Anda juga tidak bisa mengklik dalam nama tabel sebagai cara mengganti nama tabel. (SQL 2014 pada tulisan saya ini.)

Sebaliknya, Anda bisa mengklik kanan tabel, dan skrip perintah buat ke jendela kueri baru. Perintah buat ini dapat diubah dengan menambahkan kolom baru apa pun.

Jadi, untuk memodifikasi tabel, Anda bisa menyimpan data dalam tabel baru, tabel temp, atau variabel tabel. Kemudian Anda bisa menjatuhkan dan membuat kembali tabel dengan skema baru, dan akhirnya menyalin kembali data aktual . Game 3 container shell ini hanya sedikit kurang nyaman untuk kebanyakan kasus penggunaan.

Tapi, Anda tidak perlu repot dengan tabel Memory Optimized jika tidak ada masalah kinerja yang Anda coba selesaikan.

Kemudian, Anda harus mempertimbangkan jika keterbatasan dan penyelesaiannya sepadan untuk kasus penggunaan Anda. Apakah Anda memiliki masalah kinerja? Sudahkah Anda mencoba yang lain? Apakah ini akan meningkatkan kinerja Anda 10-100x? Menggunakannya atau tidak menggunakannya kemungkinan akan menjadi sedikit tidak ada otak.


-2

Anda dapat menggunakan OLTP Dalam Memori di Server Operasional tanpa masalah besar. kami menggunakan teknologi ini di perusahaan Perbankan dan Pembayaran,

Secara umum kita dapat menggunakan tabel yang dioptimalkan memori saat beban kerja terlalu tinggi. dengan menggunakan OLTP Dalam Memori, Anda dapat mencapai kinerja yang lebih baik hingga 30X! Microsoft memperbaiki sebagian besar batasan ini di SQL Server 2016 & 2017. tabel yang dioptimalkan memori memiliki arsitektur yang sangat berbeda dibandingkan dengan tabel berbasis Disk.

tabel yang dioptimalkan memori adalah dua jenis. meja tahan lama dan meja tak tertahankan. Tabel Durable dan Non-Durable menyimpan data tabel yang tersimpan dalam memori. Tabel tahan lama Furthemore menyimpan data tentang Disk untuk Data Pemulihan dan Skema. sebagian besar skenario operasional kita harus menggunakan tabel tahan lama karena kehilangan data sangat penting di sini. dalam beberapa skenario misalnya pemuatan dan Caching ETL kita bisa menggunakan tabel nondurable.

Anda dapat menggunakan ebook ini dan mempelajari cara menggunakan teknologi ini:

Kalen Delaney: https://www.red-gate.com/library/sql-server-internals-in-memory-oltp

Dmitri Korotkevitch: https://www.apress.com/gp/book/9781484227718

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.