Kami memiliki basis data produksi yang sangat besar, ukurannya sekitar 300GB. Apakah ada pendekatan untuk meningkatkan kinerja permintaan penghapusan? Saat ini kecepatan penghapusan antara 1-10k per menit, ini sangat lambat bagi kami.
sql-server
query-performance
Komunitas
sumber
sumber
Jawaban:
Jika Anda mencoba untuk menghapus sejumlah besar baris dalam satu pernyataan, maka kemungkinan Anda sedang menunggu aktivitas log. Jadi kamu bisa:
TRUNCATE
atauDROP
/CREATE
.SELECT INTO
untuk meletakkan data yang ingin Anda simpan ke tabel lain, laluTRUNCATE
, pindahkan porsi kecil kembali. (Atau cukup jatuhkan tabel lama, ganti nama baru, dan gunakan kembali batasan / izin dll.)CHECKPOINT
menghapus log alih-alih mengambil cadangan log, tetapi Anda harus memastikan untuk mengembalikannya dan mengambil cadangan lengkap baru untuk memulai kembali rantai log .sumber
Ada beberapa petunjuk, tetapi versi mana yang Anda gunakan? Apakah ini edisi perusahaan? Bagaimanapun:
Tambahkan detail, ketika Anda bekerja dengan database besar tidak ada jawaban yang valid.
sumber
Anda harus mencoba menghapusnya sepotong demi sepotong, mungkin menghapus dalam lingkaran, masing-masing menghapus iterasi itu transaksi sendiri dan kemudian menghapus log pada akhir setiap iterasi loop.
Selain itu, Anda perlu menemukan nomor yang akan Anda gunakan sebagai nilai dalam chunk untuk menghapus catatan. Perlu pengujian menyeluruh, akan lebih baik jika Anda bisa menguji nilai chunk di UAT terlebih dahulu.
Pada cara melanjutkan, akan merujuk Anda ke Hancurkan operasi penghapusan besar menjadi potongan-potongan
sumber
hapus bisa lambat jika tabel besar memiliki kunci asing rekursif.
jika demikian, temukan waktu yang tepat, nonaktifkan layanan dependend, nonaktifkan kunci asing rekursif, lakukan penghapusan besar-besaran, lalu pulihkan kunci asing lagi.
sumber
Menambahkan beberapa poin lagi ...
tablock
opsi.Untuk mendapatkan bantuan lebih lanjut, kirim pertanyaan yang Anda gunakan, info tabel plus info pemblokiran.
sumber