Dapatkah MySQL secara efektif memanfaatkan RAM 64 GB?

22

Kami telah mengalami masalah di mana kueri tabel yang memiliki sekitar 50 juta baris, dan memiliki ukuran indeks 4 GB (ukuran tabel sekitar 6 GB) menghasilkan server database bertukar memori, dan melambat secara dramatis. Saya cukup yakin ini ada hubungannya dengan ukuran tabel temp yang terlampaui, dan itu ditukar ke disk.

Jika saya memutakhirkan server database saya dari 32 GB RAM menjadi 64 GB RAM, saya bertanya-tanya apakah database MySQL akan dapat sepenuhnya memanfaatkan memori tambahan ini dan tidak bertukar. Saya telah melalui beberapa variabel (misalnya KEY_BUFFER_SIZE, dll ...), dan mereka tampaknya mendukung nilai pengaturan lebih dari 64 GB. Namun, dokumentasi MySQL mengatakan bahwa tmp_table_size maksimal sebesar 4 GB.

Jadi, apakah peningkatan memori akan sia-sia? Apakah masalah "kueri-tabel-besar" akan mendapat manfaat dari ini, atau apakah itu tidak membantu karena batas 4 GB? Saya tahu ada potensi solusi lain seperti merestrukturisasi tabel untuk dipartisi dengan cara yang berbeda, dll ... tetapi tanpa mengubah apa pun tentang tabel, akankah memori tambahan membantu?

Selain itu, secara umum, apakah ada variabel terkait memori lain yang tidak dapat dimanfaatkan MySQL saat beralih dari 32 ke 64 GB RAM?

Kami menggunakan linux 64bit (Ubuntu) sebagai server basis data kami.

Terima kasih, Galen

Galen
sumber

Jawaban:

5

Jika Anda menggunakan InnoDB, variabel paling penting untuk ditetapkan adalah innodb_buffer_pool_size. Saya akan mengaturnya menjadi sekitar 80% dari memori sistem Anda. Setelah Anda melakukan cache cache setelah beberapa penggunaan, data Anda yang paling aktif (kumpulan data yang berfungsi) akan ada dalam memori (innodb_buffer_pool_size) dan operasi Anda yang ada di dalamnya harus sangat cepat. Dengan memori 64GB, Anda pasti dapat memuat banyak di sana. Memori selalu merupakan pembelian yang baik untuk server DB.

vmfarms
sumber
11

Ya - jika Anda menggunakan InnoDB dan memiliki beban kerja baca-intensif, Anda benar-benar dapat mengambil keuntungan dari sejumlah besar RAM [dengan asumsi kumpulan data Anda akan cocok di mem - server Anda akan sangat cepat].

Saya menggunakan MySQL dengan penyimpanan InnoDB pada server 8-16 GB dengan set pemasangan yang bekerja di memori.

pQd
sumber
Sama di sini - kita menjalankan InnoDB pada kotak 64GB dan itu hebat.
James
9

Mungkin akan lebih baik jika meluangkan waktu dan usaha ekstra untuk meneliti apa yang menyebabkan sistem bertukar sebelum menghabiskan uang untuk memori?

Memori 32GB menyisakan banyak memori yang tersedia bahkan setelah memuat seluruh tabel, indeks, dan temp_table maksimum ke dalam memori. Pencarian cepat memunculkan dua lembar dokumentasi ini yang mungkin relevan:

Martin
sumber
0

Jika Anda pikir itu karena tabel temp yang sangat besar sedang dibuat, Anda mungkin ingin mempertimbangkan cara-cara Anda dapat meningkatkan kueri untuk menghindari tabel sementara.

Anda dapat memposting di Stackoverflow pos yang berisi skema, kueri, rencana jelaskan dan beberapa detail untuk masalah tersebut.

MarkR
sumber