Keuntungan menggunakan snapshot basis data untuk tujuan pelaporan

8

Apa keuntungan kinerja dari menggunakan snapshot dari database untuk tujuan pelaporan?

Cara saya melihatnya, mungkin akan menurunkan kinerja karena untuk setiap penulisan di database asli, penulisan lain harus dilakukan untuk snapshot itu sendiri.

Saya dapat melihat bahwa Anda akan menggunakan snapshot kapan pun Anda ingin melaporkan data hingga saat itu, tetapi itu tidak termasuk dalam kategori kinerja.

Jadi sekali lagi, apakah ada keunggulan kinerja?

ivanmp
sumber

Jawaban:

7

Menggunakan snapshot basis data yang terletak di server OLTP produksi Anda, kemungkinan besar, akan membuat kinerja lebih buruk. Ada dua alasan utama:

  1. Ekstra tulis overhead. Snapshots adalah copy-on-write, jadi ini jelas akan berdampak pada kinerja.

  2. Cuplikan akan berbagi halaman dari database lama pada disk, tetapi menggunakan memori sendiri di buffer pool. Jika Anda memiliki tabel besar, maka akan menghabiskan memori untuk database OLTP, dan snapshot, bahkan untuk halaman yang tidak dimodifikasi. Anda dapat berakhir dengan banyak penggunaan memori tambahan karena ini, yang dapat menyebabkan lebih banyak I / O disk jika server Anda tidak memiliki banyak RAM gratis.

Jadi jika Anda mencoba membuat pelaporan tidak terlalu mengganggu hanya pada satu server, Anda mungkin lebih baik hanya menanyakan database OLTP dan menggunakan petunjuk WITH (NOLOCK), dan kemudian memerintah hal-hal dengan gubernur sumber daya jika diperlukan. Di luar itu, lihatlah semacam sistem skala (pengiriman log, mirroring, dll.)

db2
sumber
Saya setuju bahwa snapshot dapat memperburuk keadaan, tetapi jika Anda menggunakan 2008 R2 petunjuk NOLOCK tidak melakukan apa pun untuk membantu kinerja OLTP ketika Anda melaporkan. stackoverflow.com/questions/15770402/…
James Jenkins
1

Satu keuntungan kinerja yang dapat saya lihat dari menggunakan snapshots DB adalah bahwa masalah penguncian dan pemblokiran sangat berkurang saat menggunakan snapshot untuk pelaporan.

StanleyJohns
sumber