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 table
hanya 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.
sumber
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):
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.
sumber
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.
sumber
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.
sumber