Bisakah saya memasukkan seluruh DB ke dalam memori?

9

Database saya berukuran sekitar 1gb (sesuai dengan file mdf dari db saya). Server database saya memiliki ram 4gb. Melihat konsumsi memori pada komputer saat aktif, ia duduk di sekitar 85% digunakan (termasuk OS, dll)

Apakah ini berarti bahwa semua aktivitas membaca DB bekerja di memori saja (yaitu seluruh db duduk di memori)? atau apakah masih ada kasus di mana ia harus pergi ke disk?


sumber
1
Nah, untuk perbandingan, apa gunanya saat aplikasi tidak aktif? Secara umum, salah satu manfaat dari sistem basis data adalah tidak memerlukan file lengkap dalam memori, tetapi itu akan sesuai dengan apa yang Anda tarik keluar dari memori ke dalam memori sampai Anda membuangnya di tempat lain. Saya harus menyatakan 'tidak'.
Grant Thomas
@Pak. Kekecewaan: Saya setuju itu adalah manfaat, tetapi dalam kasus di mana ia dapat menyimpan file lengkap dalam memori (seperti kasus ini), bukan?
Jika perlu, maka ya. Tetapi atas permintaan penelepon dan data yang mereka butuhkan, tidak secara alami sebagai hal biasa. Jadi, secara umum, jika Anda memiliki masalah memori database, itu akan dengan kode panggilan atau perangkat lunak pendukung, atau campuran keduanya.
Grant Thomas
1
Contoh untuk perspektif: Saya tahu perusahaan internet yang sangat besar yang memiliki beberapa situs portal yang sangat besar. Mereka mengirim ca. 300 juta iklan dari server iklan mereka sendiri untuk portal itu. Struktur server iklan sedemikian rupa sehingga ada satu Oracle DB besar dengan semua informasi untuk penghitungan dan penargetan, tetapi ada 32 server besar (RAM 32GB) yang memiliki basis data yang lebih kecil (dengan hanya iklan yang saat ini aktif) dalam RAM . Mereka tidak menyentuh disk, mereka tidak boleh: mereka hanya memiliki 1/1000 detik untuk menemukan iklan untuk ditempatkan ketika permintaan untuk itu masuk, akses disk apa pun akan membuat tujuan itu tidak mungkin tercapai.

Jawaban:

5

Ya, seluruh basis data kemungkinan disimpan dalam memori. Ini akan membersihkan halaman yang kotor ke disk pada interval pos pemeriksaan. Perhatikan bahwa semua pembaruan harus menulis ke log dan menunggu catatan log dikeraskan pada penyimpanan yang tahan lama sebelum melakukan. Makalah tua ini SQL Server 2000 I / O Basics memiliki semua detail yang Anda perlukan dan banyak lagi.

Tetapi Anda tidak perlu menebak, Anda dapat mengukur ini dengan tepat dan melihat apakah itu terjadi atau tidak. Penghitung kinerja yang relevan adalah:

  • Harapan hidup halaman Jumlah detik sebuah halaman akan tetap di buffer pool tanpa referensi.
  • Pembacaan halaman / detik Jumlah pembacaan halaman database fisik yang dikeluarkan per detik. Statistik ini menampilkan jumlah total halaman fisik yang dibaca di semua basis data. Karena I / O fisik mahal, Anda mungkin dapat meminimalkan biaya, baik dengan menggunakan cache data yang lebih besar, indeks cerdas, dan permintaan yang lebih efisien, atau dengan mengubah desain basis data.
  • Page wrote / sec Jumlah halaman database fisik yang ditulis dikeluarkan per detik.
Remus Rusanu
sumber
'Ya, seluruh database kemungkinan disimpan dalam memori.' Jadi, dalam kasus server produksi kami, dengan minimal ~ 60 situs web masing-masing menggunakan database khusus dalam SQL Server Master, di mana bahkan hanya segelintir dari ini menyamakan ukuran yang lebih besar dari memori mesin yang tersedia, bagaimana cara kerjanya ? Saya tergoda untuk mengatakan tidak ada default yang pasti, atau kemungkinan salah satu skenario - sesuai dengan komentar sebelumnya yang saya buat, itu benar-benar lebih tergantung pada lingkungan daripada mesin.
Grant Thomas
@Pak. Kekecewaan: Anda menerapkan jawaban saya untuk pertanyaan yang berbeda. OP mengatakan: My database is about 1gb in size (according to the mdf file of my db). My database server has 4gb of ram.. Jika Anda menginginkan jawaban untuk
kasing
Anda ahli di sini, tapi tolong permisi sifat ingin tahu saya: jadi apakah teori ini berasumsi (karena kita tidak memiliki data spesifik) bahwa mesin tidak melakukan hal lain? Atau menyumbang ambang batas memori tertentu yang digunakan oleh konsumen yang tidak dikenal?
Grant Thomas
Seperti yang saya katakan: you don't have to guess, you can measure this exactly.
Remus Rusanu
-5

Seluruh DB (yaitu data) tidak akan disimpan dalam memori (sql server). Setelah memeriksa indeks dan / atau kunci, itu akan mengambil pointer ke tempat dalam file data data yang Anda cari, dan kemungkinan kemudian pergi ke disk untuk mengambilnya. Jika tidak ada kunci atau indeks, harus memindai seluruh tumpukan.

Tergantung pada versi SQL Server yang Anda jalankan, mungkin ada strategi untuk caching data yang digunakan dengan baik untuk meminimalkan pembacaan disk.

Anda BISA mendapatkan dalam-memori DB misalnya database MySql Cluster .... Ini dirancang agar sesuai dengan SELURUH db ke dalam memori di seluruh cluster server untuk ketersediaan tinggi / pemulihan bencana dan pengambilan data yang cepat.


sumber
1
Saya belum cukup perwakilan untuk memberikan suara ini tetapi tidak yakin mengapa Anda mengatakan bahwa itu pasti tidak akan disimpan dalam memori. Setelah halaman dibaca ke dalam cache buffer, ia akan tetap di sana sampai tekanan memori internal atau eksternal menyebabkan cache untuk dipangkas.
Martin Smith