Database SQL Server pada SSD - apakah ada keuntungan untuk file terpisah untuk setiap tabel?

19

Saya membuat basis data di mana akan ada sekitar 30 tabel, dengan setiap tabel berisi puluhan juta baris dan setiap tabel berisi satu kolom penting dan satu kolom kunci asing / utama untuk memaksimalkan efisiensi kueri dalam menghadapi beban berat. pembaruan dan penyisipan dan sangat memanfaatkan indeks berkerumun. Dua tabel akan berisi data tekstual panjang variabel, dengan satu di antaranya berisi ratusan juta baris tetapi sisanya hanya berisi data numerik.

Karena saya benar-benar ingin memeras setiap tetes kinerja terakhir dari perangkat keras yang saya miliki (sekitar 64GB RAM, SSD yang sangat cepat dan 16 core), saya berpikir untuk memungkinkan setiap tabel memiliki file sendiri sehingga tidak masalah jika Saya bergabung di 2, 3, 4, 5 atau lebih tabel, setiap tabel akan selalu dibaca menggunakan utas terpisah dan struktur setiap file akan sangat selaras dengan isi tabel, yang diharapkan akan meminimalkan fragmentasi dan membuatnya lebih cepat untuk SQL Server untuk menambah konten dari tabel yang diberikan.

Satu peringatan, saya terjebak di SQL Server 2008 R2 Web Edition . Yang berarti saya tidak dapat menggunakan partisi horisontal otomatis, yang mengesampingkan itu sebagai peningkatan kinerja.

Apakah menggunakan satu file per tabel benar-benar memaksimalkan kinerja, atau apakah saya mengabaikan karakteristik engine SQL Server bawaan yang akan membuat hal itu berlebihan?

Kedua, jika menggunakan satu file per tabel menguntungkan, mengapa create tablehanya memberi saya opsi untuk mengalokasikan tabel ke grup file dan bukan ke file logis tertentu? Ini akan mengharuskan saya untuk membuat grup file terpisah untuk setiap file dalam skenario saya, yang menunjukkan kepada saya bahwa mungkin SQL Server tidak membayangkan keuntungan yang saya asumsikan berasal dari melakukan apa yang saya usulkan.

Nathan Ridley
sumber

Jawaban:

18

Saya berpikir untuk mengizinkan setiap tabel untuk memiliki file sendiri sehingga tidak masalah jika saya bergabung pada tabel 2, 3, 4, 5 atau lebih, setiap tabel akan selalu dibaca menggunakan utas terpisah dan struktur setiap file akan selaras dengan isi tabel, yang diharapkan akan meminimalkan fragmentasi dan membuatnya lebih cepat untuk SQL Server untuk menambah konten dari tabel yang diberikan

Apa yang kamu bicarakan? Tidak yakin dari mana Anda mendapatkan informasi, tetapi Anda harus membuang sumber itu. Tidak ada dari apa yang Anda asumsikan di sini yang benar.

Jika Anda ingin membaca diskusi yang bagus tentang kinerja SSD untuk SQL Server ada beberapa seri blog di luar sana. Seperti biasanya, tulisan Paul Randal adalah yang teratas:

Brent juga memiliki presentasi yang bagus tentang topik: SQL on SSD: Hot and Crazy Love dan ada lebih banyak di luar sana.

Melihat semua presentasi ini, Anda akan segera menyadari bahwa mereka semua fokus pada penulisan karena di sinilah kinerja SSD muncul. Kata-kata posting Anda hampir seluruhnya tentang bacaan, yang merupakan topik berbeda. Jika membaca adalah titik rasa sakit Anda maka Anda harus berbicara tentang RAM, bukan tentang SSD, dan tentang pengindeksan dan strategi kueri yang tepat.

Remus Rusanu
sumber
1
Yap, saya telah diberikan informasi yang salah di suatu tempat di sepanjang garis tetapi seperti saya mengomentari jawaban Stuart, saya mengajukan pertanyaan untuk memastikan saya tidak mendasarkan keputusan saya pada informasi yang salah. Terima kasih atas tautannya, saya akan memeriksanya.
17

Saran pertama saya adalah untuk tidak membuat asumsi tentang kinerja tanpa melakukan pengujian beban terhadap kedua konfigurasi.

Dugaan saya setelah melihat konfigurasi seperti itu (yang masuk akal di atas kertas) di masa lalu adalah bahwa memiliki setiap tabel pada file terpisah tidak akan memiliki dampak positif yang terukur untuk kinerja ... dan bahwa kompleksitas tambahan akan mengimbangi setiap kenaikan kinerja bahkan jika itu bisa diukur.

Terakhir, ketika datang untuk memeras setiap tetes kinerja dari Sql Server, saya merujuk Anda ke bagan berikut (asalkan Microsoft saya):

masukkan deskripsi gambar di sini

Setiap potensi optimasi yang dapat dibuat dari perspektif aplikasi dengan mudah mengecilkan setiap kemungkinan optimasi pada tingkat konfigurasi perangkat keras / basis data ... jadi fokuskan perhatian Anda dengan tepat.

Michael Fredrickson
sumber
Tentu saja. Dalam kasus saya, saya telah mengoptimalkan seluruh sistem sebanyak yang saya bisa dan hambatan utama yang saya miliki saat ini adalah kecepatan permintaan yang sangat cepat dalam menghadapi pembaruan, penghapusan, dan penyisipan yang sering dilakukan. Karena saya akan memanfaatkan SQL Server untuk memecahkan masalah ini, saya ingin memastikan saya memberikannya kesempatan terbaik mutlak untuk beroperasi secepat mungkin pada data saya.
@ NathanRidley Ok, mengerti ... Saya pikir jawaban yang sebenarnya kecuali seseorang memiliki sumber daya yang mengatakan "tidak pernah melakukan ini", bahwa tindakan terbaik adalah membandingkan dua konfigurasi terhadap beban kerja Anda yang khas, dan melihat apakah ada perbedaan yang dapat diukur.
Michael Fredrickson
4

Seperti yang telah dicatat orang lain, tidak ada manfaat langsung dari satu file per tabel; inilah sinopsis hebat dari Steve Jones tentang bagaimana mitos ini berasal: http://www.sqlservercentral.com/blogs/steve_jones/2009/10/13/sql-server-legend-data-files-and-threads/

Anda mungkin juga ingin menyelidiki tampilan yang dipartisi yang saya percaya didukung oleh Edisi Web 2008. Ada beberapa trik untuk mengkodekan terhadap tampilan yang dipartisi, tetapi Anda dapat meniru banyak fungsi tabel yang dipartisi secara relatif mudah.

Stuart Ainsworth
sumber
2

Saya pikir file terpisah untuk setiap tabel tidak akan membawa manfaat kinerja. Indeks yang benar dapat memiliki peningkatan kinerja potensial (disk baca) di server database.

Apakah SQL Server 2008 R2 mendukung kompresi? Jika ya, hidupkan itu.

Koreksi saya jika saya salah.

Peter Kiss
sumber
Bisakah Anda menguraikan mengapa tidak ada manfaat kinerja? Paling tidak, jelaskan mengapa ini terjadi ketika file terpisah memungkinkan SQL Server untuk menggunakan beberapa utas untuk membaca.
Jika Anda meletakkan semua tabel di filegroup sendiri tetapi pada drive yang sama kinerjanya akan sama sebelum pemartisian. Tetapi jika Anda memisahkan beberapa tabel ke filegroup mereka pada disk lebih cepat yang berbeda itu akan memiliki manfaat kinerja. Anda juga dapat mempartisi misalnya berdasarkan tahun jika Anda memiliki banyak data yang tergantung pada tahunnya. Dengan teknik ini Anda dapat menyimpan data yang paling sering digunakan pada disk yang lebih cepat daripada yang lama. Anda dapat memisahkan indeks juga tetapi hanya jika Anda memasukkannya ke dalam disk fisik baru akan memiliki manfaat kinerja.
Anda benar tentang thread paralel (tabel / file) tetapi saya pikir sampai Anda hanya memiliki satu disk fisik, perolehan kinerja akan kecil.
Dan saya sarankan Anda untuk mendapatkan array HDD RAID yang kuat untuk basis data karena SSD akan segera mati.