Kapan indeks nonclustered disimpan di filegroup terpisah?

16

Saya telah mendengar bahwa menyimpan indeks pada filegroup dan drive yang berbeda meningkatkan kinerja dalam database karena drive tidak harus bolak-balik antara indeks dan data yang dirujuk oleh indeks. Saya juga pernah mendengar bahwa ini adalah mitos.

Kapan sebaiknya menyimpan indeks yang tidak tercakup pada grup dan drive terpisah? Apa bukti perfmon / profiler yang membuat saya sampai pada kesimpulan itu? Apakah perangkat keras berperan dalam keputusan (apakah RAID / SAN digunakan melalui satu drive)?

Michael Hedgpeth
sumber

Jawaban:

10

Bagian paling lambat dari sistem DB adalah disk drive. Menghilangkan kemacetan di tingkat disk akan meningkatkan kinerja. Ketika data sedang dicari dan indeks digunakan, indeks pertama kali dicari dan kemudian data yang sesuai diambil. Jika kedua indeks dan data berada di disk yang sama, maka ada beberapa pertikaian yang terjadi. Sedangkan, jika data berada pada disk (fisik) yang berbeda, maka ada IO lebih cepat terjadi, sehingga meningkatkan kinerja. Bagian utama yang perlu diperhatikan adalah bahwa data atau indeks berada pada disk fisik atau LUN yang terpisah.

Anda akan menggunakan skenario seperti itu jika Anda perlu mendapatkan kinerja yang lebih baik dari sistem Anda, asalkan Anda memiliki disk. Untuk counter perfmon Anda Anda bisa menggunakan Physical Disk – Avg. Disk sec/Read, Physical Disk – Avg. Disk sec/Write, Physical Disk – Disk Reads/sec, Physical Disk – Disk Writes/secuntuk memiliki sebelum dan sesudah perbandingan perubahan.

StanleyJohns
sumber
1
Jika alih-alih dua disk fisik yang terpisah jika entah bagaimana saya mengelola indeks dan data pada dua disk drive yang terpisah misalnya D: \ dan E: \ ada pada Hard Disk yang sama, maka apakah masih akan memberikan saya beberapa peningkatan kinerja jika saya mempertimbangkan pertengkaran terkait dengan membaca penyimpanan hard disk?
RBT
5

Memang benar bahwa menyebarkan I / O simultan Anda di antara drive yang berbeda akan meningkatkan kinerja - itu bukan mitos. Itu adalah mitos bahwa melakukannya dua kali akan meningkatkan kinerja lagi.

Jika Anda SAMA , maka memecah array Anda menjadi dua partisi dan meletakkan indeks pada satu dan tabel pada yang lain adalah buang-buang waktu.

Jack Douglas
sumber
Saya setuju, tetapi saya tidak percaya bahwa ini adalah apa yang dia minta.
NTDLS
Pertanyaan yang diajukan: "Apakah perangkat keras berperan dalam keputusan (apakah RAID / SAN digunakan lebih dari satu drive)?". Jawaban saya pada dasarnya adalah: Jika Anda RAID, jangan repot-repot memisahkan indeks dan tabel. Yang tidak mengatakan Anda pasti harus bahkan jika Anda tidak memiliki RAID ...
Jack Douglas
5

Memisahkan Indeks dari data ke dalam kelompok-kelompok terpisah = peningkatan kinerja sangat dapat diperdebatkan. Peningkatan kinerja "mungkin" terjadi jika Anda memiliki perangkat keras yang mendasarinya untuk mendukungnya, tetapi hanya dengan fakta bahwa memisahkannya ke berbagai grup grup tidak memberi Anda peningkatan kinerja. Dan juga TIDAK mudah untuk mengukur peningkatan perf karena ini.

Ref: http://weblogs.sqlteam.com/dang/archive/2008/08/01/Are-you-a-DBA-Monkey.aspx

Anda harus mengajukan pertanyaan terlebih dahulu. Mengapa Anda perlu melakukan ini?

  1. Apakah Anda ingin meningkatkan kinerja cadangan dengan TIDAK memasukkan indeks?
  2. Apakah Anda ingin meningkatkan kinerja membaca & menulis ke indeks ini?
  3. Apakah Anda melakukan ini untuk pengelolaan yang lebih baik penempatan objek yang mendasarinya?
  4. Apakah Anda memiliki volume data yang besar yang memiliki beragam kebutuhan untuk kinerja?
  5. Apakah Anda ingin menggunakan SSD untuk indeks non-cluster untuk meningkatkan kinerja dll ...

Saya melihat tugas ini untuk mendukung kebutuhan # 5 dalam daftar di atas dan sepertinya proposal yang bagus bagi saya walaupun kami belum menindaklanjutinya.

Perhatikan bahwa keputusan ini BUKAN mudah dan Anda perlu mencari tahu apa yang ingin Anda lakukan dan memastikan Anda memiliki perangkat keras untuk didukung. Jangan melakukan perubahan seperti ini kecuali jika Anda telah menguji dengan baik dan Anda melihat peningkatan yang signifikan dalam kinerja jika tidak, Anda mungkin juga membuang ide ini. Ini TIDAK layak jika Anda mengharapkan peningkatan perf dengan hanya memisahkan indeks ke filegroup terpisah.

Sankar Reddy
sumber
Saya suka artikel Dan :-). Saya kira itu terjadi pada kita semua untuk mengimpor standar perusahaan lama dan pada suatu saat mempertanyakan kegunaannya.
Marian
1

Saya akan menceritakan pengalaman pribadi saya tentang item ini. Indeks non-clustered harus disimpan pada filegroup terpisah ketika disk drive saat ini tidak cukup besar untuk ruang yang dibutuhkan :-). Anda dapat menertawakannya .. tetapi itu terjadi.

Jadi perbaikan darurat bagi kami, ketika kami akan tetap tanpa ruang kosong pada drive data, adalah membuat skrip yang bagus untuk membuat ulang semua indeks yang tidak berkerumun online di sebuah filegroup baru pada drive dengan ruang kosong. Orang akan berpikir itu mudah dan cepat untuk membeli penyimpanan baru .. tetapi tidak seperti itu, sungguh.

Mengenai kinerja, kami tidak melihat sesuatu yang luar biasa setelah beraktivitas. Tapi ini adalah kotak penyimpanan SAN besar tempat semuanya disatukan :-).

Marian
sumber
1

Secara umum; memisahkan data dan indeks ke disk terpisah yang berkinerja sama dapat meningkatkan kinerja untuk operasi penulisan substansial ke tabel itu atau operasi baca besar yang memanfaatkan indeks itu. Metodologi serupa dengan beberapa operasi I / O lainnya, seperti tabel dipartisi yang tersebar di beberapa disk fisik.

Namun itu juga sangat tergantung pada penyimpanan . Sebagai contoh; jika Anda memiliki server dengan ioDrive Fushion yang bagus (atau yang serupa) dan juga memiliki disk pemintalan individual. Mungkin lebih bermanfaat untuk menyimpan semuanya di ioDrive (kecuali ruang terbatas). Ada juga hal-hal lain yang perlu dipertimbangkan - konfigurasi RAID, konfigurasi penyimpanan jaringan.

Lakukan beberapa penandaan bangku pada server pengujian dengan perangkat keras yang sama atau (hanya jika server sekunder bukan pilihan) selama jam non-puncak dengan data sementara. Link DBA-Monkey oleh Sankar di atas adalah makanan yang bagus untuk dipikirkan.

GP Van Eron
sumber