Tetapi baru-baru ini saya menemukan beberapa database di server di mana setiap database memiliki banyak file mdf.
Itu karena konvensi penamaan yang salah. Microsoft mengatakan bahwa setiap database memiliki satu file data primer tetapi itu tidak berarti hanya memiliki satu "file data mdf", database dapat memiliki banyak file data dengan .mdf
ekstensi tetapi hanya satu yang akan menjadi file data primer. Lebih baik memberikan mdf
ekstensi ke file data primer dan ndf
ke file data sekunder untuk memiliki demarkasi yang tepat tetapi ini bukan aturan yang keras dan cepat Anda juga dapat memberikan ekstensi .abc ke file data primer sehingga apa yang Anda saksikan adalah normal. Faktanya, Anda dapat memberikan ekstensi apa pun yang Anda suka.
Apakah ada kebijaksanaan dalam memiliki beberapa file .mdf untuk database?
Jika yang kamu maksud:
Adakah kebijaksanaan untuk memiliki banyak file primer untuk basis data?
Jawabannya adalah tidak, database hanya dapat memiliki satu file data primer.
Tetapi jika Anda maksud:
Apakah ada kebijaksanaan dalam memiliki banyak file data (.mdf, .ndf, atau nama yang berbeda) untuk database?
Itu tergantung, Anda bisa dan tidak bisa mendapatkan keuntungan dengan banyak file data. Jika mereka tersebar di berbagai drive fisik (saya berbicara tentang spindle), Anda akan melihat beberapa keuntungan dengan menulis aplikasi intensif. Jika mereka semua berada di partisi logis yang sama, itu tidak akan memiliki keuntungan karena mendasari mereka akan menggunakan sumber daya bersama. Menggunakan file dan filegroup meningkatkan kinerja database, karena memungkinkan database dibuat di beberapa disk, beberapa pengontrol disk, atau sistem RAID (redundant array of independent disks). Misalnya, jika komputer Anda memiliki empat disk, Anda bisa membuat database yang terdiri dari tiga file data dan satu file log, dengan satu file di setiap disk. Saat data diakses, empat kepala baca / tulis dapat mengakses data secara paralel pada saat yang sama.
Sesuai artikel BOL MSDN ini
Filegroup menggunakan strategi pengisian proporsional di semua file dalam setiap filegroup. Ketika data dituliskan ke filegroup, SQL Server Database Engine menulis jumlah yang proporsional dengan ruang kosong dalam file untuk setiap file dalam filegroup, alih-alih menulis semua data ke file pertama sampai penuh. Kemudian menulis ke file berikutnya. Misalnya, jika file f1 memiliki 100 MB gratis dan file f2 memiliki 200 MB gratis, satu tingkat dialokasikan dari file f1, dua perpanjangan dari file f2, dan seterusnya. Dengan cara ini, kedua file menjadi penuh pada waktu yang hampir bersamaan, dan striping sederhana tercapai.
Keuntungan lain yang saya tahu adalah mempertimbangkan database 1 TB jika Anda memiliki file data tunggal untuk itu dan Anda ingin mengembalikan database ini pada beberapa server lain yang sangat tidak mungkin Anda akan memiliki 1 TB ruang kosong. Sekarang jika database yang sama tersebar pada file yang berbeda masing-masing memiliki ukuran 250 G itu menjadi lebih mudah dalam pemulihan. Ini mungkin sebenarnya bukan skenario Anda, tetapi sedikit banyak membantu untuk menemukan server dengan empat drive 250 G dari satu drive 1 TB.
Saya akan mengatakan bukannya banyak file data yang lebih baik untuk memiliki grup file yang berbeda tetapi sekali lagi tidak ada banyak lingkungan. Basis data yang terdiri dari beberapa grup file dapat dipulihkan secara bertahap dengan proses yang dikenal sebagai pemulihan sedikit demi sedikit. Piecemeal restore berfungsi dengan semua model pemulihan, tetapi lebih fleksibel untuk model penuh dan sebagian besar dicatat daripada mode sederhana. File atau filegroup dalam database dapat dicadangkan dan dipulihkan secara individual. Ini memungkinkan Anda untuk hanya mengembalikan file yang rusak tanpa harus mengembalikan sisa database. File dalam cadangan filegroup dapat dipulihkan secara individual atau sebagai grup