Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Tabel yang sangat besar di SQL Server

Setuju dengan Marc dan Unkown di atas ... 6 indeks dalam indeks berkerumun terlalu banyak, terutama pada tabel yang hanya memiliki 14 kolom. Anda tidak boleh memiliki lebih dari 3 atau 4, jika itu, saya akan mengatakan 1 atau mungkin 2. Anda mungkin tahu bahwa indeks berkerumun adalah tabel aktual pada disk sehingga ketika catatan dimasukkan, mesin basis data harus mengurutkannya dan letakkan di tempat yang diurutkan terorganisir pada disk. Indeks yang tidak berkerumun tidak, mereka mendukung 'tabel' pencarian. VLDB saya diletakkan di disk (CLUSTERED INDEX) sesuai dengan poin pertama di bawah.

  1. Kurangi indeks berkerumun Anda menjadi 1 atau 2. Pilihan bidang terbaik adalah IDENTITY (INT), jika Anda memilikinya, atau bidang tanggal di mana bidang ditambahkan ke database, atau bidang lain yang merupakan semacam alami bagaimana data Anda ditambahkan ke database. Intinya adalah Anda mencoba menyimpan data itu di bagian bawah tabel ... atau meletakkannya di disk dengan cara terbaik (90%+) sehingga Anda akan membaca catatan. Hal ini membuat tidak ada reorganisasi yang terjadi atau dibutuhkan satu dan hanya satu pukulan untuk mendapatkan data di tempat yang tepat untuk pembacaan terbaik. Pastikan untuk menempatkan bidang yang dihapus ke dalam indeks yang tidak berkerumun sehingga Anda tidak kehilangan kemanjuran pencarian. Saya TIDAK PERNAH menempatkan lebih dari 4 bidang di VLDB saya. Jika Anda memiliki bidang yang sering diperbarui dan termasuk dalam indeks berkerumun Anda, Aduh, itu akan mengatur ulang catatan pada disk dan menyebabkan fragmentasi BIAYA.
  2. Periksa faktor pengisi pada indeks Anda. Semakin besar angka faktor pengisian (100) semakin lengkap halaman data dan halaman indeks. Sehubungan dengan berapa banyak catatan yang Anda miliki dan berapa banyak catatan yang Anda masukkan, Anda akan mengubah faktor pengisi # (+ atau -) indeks non-cluster Anda untuk memungkinkan ruang isian saat catatan dimasukkan. Jika Anda mengubah indeks berkerumun ke bidang data berurutan, maka ini tidak akan terlalu penting pada indeks berkerumun. Rule of thumb (IMO), faktor pengisi 60-70 untuk penulisan tinggi, 70-90 untuk penulisan sedang, dan 90-100 untuk pembacaan tinggi/penulisan rendah. Dengan menurunkan fillfactor Anda ke 70, berarti bahwa untuk setiap 100 catatan pada halaman, 70 catatan ditulis, yang akan menyisakan ruang kosong 30 catatan untuk catatan baru atau yang ditata ulang. Memakan lebih banyak ruang, tapi itu pasti mengalahkan keharusan DEFRAG setiap malam (lihat 4 di bawah)
  3. Pastikan statistik ada di tabel. Jika Anda ingin menyapu database untuk membuat statistik menggunakan "sp_createstats 'indexonly'", maka SQL Server akan membuat semua statistik pada semua indeks yang telah dikumpulkan mesin sebagai statistik yang memerlukan. Jangan tinggalkan atribut 'indexonly' atau Anda akan menambahkan statistik untuk setiap bidang, itu tidak akan baik.
  4. Periksa tabel/indeks menggunakan DBCC SHOWCONTIG untuk melihat indeks mana yang paling banyak terfragmentasi. Saya tidak akan membahas detailnya di sini, ketahuilah bahwa Anda perlu melakukannya. Kemudian berdasarkan informasi tersebut, ubah fillfactor naik atau turun sehubungan dengan perubahan indeks yang mengalami perubahan dan seberapa cepat (dari waktu ke waktu).
  5. Setup jadwal pekerjaan yang akan dilakukan secara online (DBCC INDEXDEFRAG) atau offline (DBCC DBREINDEX) pada indeks individu untuk defrag mereka. Peringatan:jangan lakukan DBCC DBREINDEX pada tabel besar ini tanpa selama waktu pemeliharaan karena akan menurunkan aplikasi ... terutama pada CLUSTERED INDEX. Anda telah diperingatkan. Uji dan uji bagian ini.
  6. Gunakan rencana eksekusi untuk melihat apa yang SCANS, dan FAT PIPES yang ada dan sesuaikan indeks, kemudian defrag dan tulis ulang procs yang tersimpan untuk menyingkirkan hot spot tersebut. Jika Anda melihat objek MERAH dalam rencana eksekusi Anda, itu karena tidak ada statistik di bidang itu. Itu buruk. Langkah ini lebih merupakan "seni daripada sains".
  7. Di luar jam sibuk, jalankan UPDATE STATISTICS WITH FULLSCAN untuk memberi mesin kueri informasi sebanyak mungkin tentang distribusi data. Jika tidak, lakukan STATISTIKA PEMBARUAN standar (dengan pemindaian standar 10%) pada tabel selama hari kerja atau lebih sering sesuai keinginan Anda dengan pengamatan Anda untuk memastikan mesin memiliki lebih banyak informasi tentang distribusi data untuk mengambil data secara efisien.

Maaf ini sangat panjang, tapi ini sangat penting. Saya hanya memberi Anda sedikit informasi di sini tetapi akan banyak membantu. Ada beberapa firasat dan pengamatan yang masuk ke strategi yang digunakan oleh poin-poin ini yang akan membutuhkan waktu dan pengujian Anda.

Tidak perlu pergi ke edisi Enterprise. Saya melakukannya untuk mendapatkan fitur yang dibicarakan sebelumnya dengan partisi. Tapi saya TERUTAMA memiliki kemampuan mult-threading yang jauh lebih baik dengan pencarian dan DEFRAGING dan pemeliharaan online ... Dalam edisi Enterprise, ini jauh lebih baik dan lebih bersahabat dengan VLDB. Edisi standar juga tidak menangani DBCC INDEXDEFRAG dengan database online.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah mungkin menjalankan beberapa pernyataan DDL di dalam transaksi (dalam SQL Server)?

  2. Cara Menemukan Pengaturan ANSI_NULLS Database di SQL Server (T-SQL)

  3. Cari kueri di beberapa kolom tabel?

  4. Cara Menambahkan Kolom identitas ke Tabel oleh TSQL dan GUI di SQL Server - Tutorial SQL Server / T-SQL Bagian 40

  5. TSQL Finding Order yang terjadi dalam 3 bulan berturut-turut