Untuk memaksimalkan kinerja DB, perintah mana yang harus dijalankan setelah memuat sejumlah besar data ke SQL Server 2008 melalui SSIS

11

Saya telah menulis paket SSIS untuk memuat data uji ke dalam database kosong. Beberapa tabel sangat besar (~ 700 juta baris). Setelah paket SSIS selesai, adakah perintah yang harus saya jalankan (sebagai DBA magang!) Untuk memaksimalkan kinerja database?

Misalnya, saya mengeksekusi EXEC sp_updatestatstetapi dilaporkan bahwa tidak ada indeks yang perlu diperbarui.

Apakah ada daftar hal yang harus dilakukan setelah sejumlah besar data telah dimuat atau apakah SQL Server 2008 hanya mengurus semua itu untuk Anda?

Mark Robinson
sumber

Jawaban:

8

Jika Anda memuat ke basis data kosong, Anda bisa / harus mengambil langkah-langkah untuk menghindari keharusan langkah pemeliharaan tambahan setelah memuat. Fragmentasi adalah musuh, itulah yang ingin Anda hindari.

  • Jatuhkan semua indeks NC sebelum memuat.
  • Posting memuat, tambahkan indeks NC untuk setiap tabel secara berurutan yaitu jangan menambahkan indeks ke TableA, lalu TableB, lalu kembali ke TableA. Ini tidak berpengaruh pada fragmentasi tetapi dapat meningkatkan waktu yang dibutuhkan untuk menambahkan indeks pada dataset yang sangat besar (mengurangi buffer pool churn).
  • Jika Anda bisa memasukkan data ke tabel dalam urutan indeks berkerumun, biarkan indeks berkerumun di tempat. Jika Anda tidak bisa, buang data ke tumpukan dan membangun kembali ke beban posting indeks berkerumun.

Daripada menyalin dan menempel, saya akan mengarahkan Anda ke daftar referensi yang sangat komprehensif untuk optimasi ETL @Marian disatukan dalam jawaban untuk pertanyaan yang saya tanyakan di BCP . Banyak dari ini akan sama berlaku untuk skenario Anda.

Mark Storey-Smith
sumber
2
Menarik, pada tautan ke video dari SQLCAT dan SSIS temuan mereka tidak pernah menjatuhkan indeks NC. Kira ini adalah kasus lain dari "itu tergantung"
billinkc
2
@ Billinkc bukankah itu untuk beban tambahan, bukan dari database kosong pertanyaan ini merujuk juga? Either way, pengujian SQLCAT cenderung melibatkan kelas perangkat keras yang jarang terlihat di organisasi tipikal.
Mark Storey-Smith
5

Tergantung pada seberapa banyak jendela yang Anda miliki tetapi umumnya memperbarui statistik dan membangun kembali / menyusun kembali indeks adalah langkah yang baik untuk dilakukan. Selain itu, seharusnya tidak ada hal lain yang perlu Anda lakukan dengan sungguh-sungguh.

Statistik memberi tahu optimizer kueri berapa banyak baris yang kemungkinan dipengaruhi oleh operasi dan pada gilirannya memberitahu SQL pendekatan mana yang harus diambil untuk menjalankan kueri Anda. Memasukkan data dapat mengubah distribusi dan jika Anda belum memasukkan cukup baris untuk memicu pembaruan statistik dalam mode pembaruan otomatis, manual harus membantu. Jika Anda memiliki jendela, saya katakan tetap bagian pembaruan statistik.

Indeks dapat terfragmentasi ketika data ditambahkan. Membangun kembali atau Reorganisasi membantu mengurangi hal ini yang dapat menyebabkan peningkatan kinerja ketika benar-benar mengakses data Anda.

Mike Walsh
sumber
4
Sejalan dengan Indeks, di salah satu video SSIS dari SQLCAT , mereka juga menyarankan aturan praktis bahwa jika pertumbuhan data Anda> 100% dan ada satu NCI, jatuhkan dan buat kembali. Jika lebih dari 10% dan ada 2+ NCI, jatuhkan dan buat kembali akan menghasilkan kinerja yang lebih baik.
billinkc
2
Hanya untuk mengklarifikasi komentar Bill - saya pikir dia mengatakan saran adalah untuk saat-saat drop-buat artinya Drop Index, Lakukan data Anda, Kemudian Buat kembali indeks Anda .. Daripada meninggalkan indeks di sana selama memuat dan membangun kembali setelah. Saya pikir tetap begitu :-) dan ya, bagus, saya memberi +1 komentar itu.
Mike Walsh