Bagaimana cara memaksimalkan MySQL pada mesin QuadCore dengan RAM 16 GB?

10

Saya menjalankan server MySQL 5.5 di workstation saya untuk analisis data ilmiah dan bertanya-tanya bagaimana cara mengkonfigurasi MySQL untuk mendapatkan hasil maksimal dari segi kinerja. Jenis kueri yang biasanya saya jalankan melibatkan gabungan dari 10-20 tabel dan dapat berjalan cukup lama, satu hingga beberapa menit tidak terkecuali sama sekali. Hanya sedikit pengguna yang mengakses database secara bersamaan (5 adalah maksimum). Saya memindahkan server dari Lenovo Thinkpad T61 dengan Dual Core 2.2 GHz dan 4 GB RAM ke mesin baru berikut dengan komponen yang dipilih sendiri:

  • Intel i7 3770, 4x 3.4 GHz (menjalankan @ 4x3.7 GHz)
  • Chipset Z77
  • 16 GB DDR3 1600 RAM
  • Windows 7 Prof 64-bit
  • Windows dan server MySQL berjalan pada drive SSD Intel seri 520

Tes pertama (menjalankan kueri yang sama di kedua mesin) menunjukkan peningkatan kecepatan yang pasti untuk yang baru, tetapi kueri masih membutuhkan banyak waktu dan saya mengharapkan lebih banyak dorongan. Pertanyaan yang dimaksud dioptimalkan dengan cukup baik, yaitu semua tabel memiliki kunci yang tepat yang juga digunakan pada "jelaskan diperpanjang".

Sekarang ke pengaturan MySQL saya saat ini: Pertama saya harus menyebutkan bahwa saya sudah pindah dari MyISAM ke Innodb dulu.

Beberapa tweak my.ini saya (mis. Keberangkatan dari pengaturan default):

# Maximum size for internal (in-memory) temporary tables. If a table
# grows larger than this value, it is automatically converted to disk
# based table This limitation is for a single table. There can be many
# of them.
#tmp_table_size=35M
tmp_table_size=4000M
max_heap_table_size=4000M

# InnoDB, unlike MyISAM, uses a buffer pool to cache both indexes and
# row data. The bigger you set this the less disk I/O is needed to
# access data in tables. On a dedicated database server you may set this
# parameter up to 80% of the machine physical memory size. Do not set it
# too large, though, because competition of the physical memory may
# cause paging in the operating system.  Note that on 32bit systems you
# might be limited to 2-3.5G of user level memory per process, so do not
# set it too high.
#innodb_buffer_pool_size=96M
innodb_buffer_pool_size=800M

general-log
expire_logs_days = 60
general_log_file = "F:/my_query_mysql.log"
log-output = TABLE
optimizer_search_depth = 0 #meant to cure the "statistics state" bug in some queries

Saya ingin tahu apakah seseorang akan menyarankan perubahan pada angka-angka di atas atau bahkan pengaturan lebih lanjut yang tidak saya ketahui.

Saya menghargai komentar yang membantu.

Steve

EDIT: Saya memiliki dua pertanyaan yang melibatkan gabungan 10-20 tabel dan menjalankannya di notebook Lenovo dan PC baru saya. Kueri # 1 mengambil 3m36s di mesin baru vs 9m11s di laptop; Kueri # 2 mengambil 22,5 detik di workstation vs 48,5 detik di laptop. Jadi kecepatan eksekusi ditingkatkan kira-kira dengan faktor 2-2.5. Di workstation, bahkan 50% dari RAM digunakan. Beban CPU rata-rata di empat inti (seperti yang dilaporkan oleh Windows Task Manager) hanya sekitar 13%. Beban berdasarkan per inti (seperti yang dilaporkan oleh Core Temp) adalah sekitar 25-40% untuk SATU inti, sementara itu <= 10% untuk yang lain, menunjukkan bahwa MySQL tidak menggunakan banyak inti untuk satu permintaan tunggal .

Steve06
sumber
Tolong tunjukkan memuat server Anda, jadi periksa memori, io, cpu memuat dll.
Saya akan menjalankan beberapa tes dan melaporkan kembali apa yang dikatakan Windows Task Manager (atau Anda akan menyarankan alat yang lebih baik?)
Itu seharusnya cukup untuk indikasi pertama untuk melihat di mana masalah Anda.
baru saja menambahkan beberapa statistik.
2
Selain itu Anda juga dapat mencoba wizard Percona untuk mendapatkan pengaturan "disarankan" untuk server database Anda di tools.percona.com/wizard
Stephen Senkomago Musoke

Jawaban:

5

Karena Anda menjalankan MySQL 5.5, Anda mungkin ingin mempertimbangkan untuk mengonfigurasi InnoDB untuk mengakses banyak core

Berikut adalah pengaturan yang harus Anda gunakan

innodb_thread_concurrency menetapkan batas atas jumlah utas bersamaan yang bisa dibuka oleh InnoDB. Nomor bulat terbaik untuk ditetapkan untuk ini adalah (2 X Jumlah CPU) + Jumlah Disk. UPDATE : Seperti yang saya pelajari secara langsung dari Percona NYC Conference, Anda harus mengatur ini ke 0 untuk mengingatkan InnoDB Storage Engine untuk menemukan jumlah utas terbaik untuk lingkungan tempat ia berjalan.

innodb_concurrency_tickets menetapkan jumlah utas yang dapat melewati pemeriksaan konkurensi dengan impunitas. Setelah batas itu tercapai, pengecekan konkurensi thread menjadi norma lagi.

innodb_commit_concurrency menetapkan jumlah transaksi bersamaan yang dapat dilakukan. Karena defaultnya adalah 0, tidak menetapkan ini memungkinkan sejumlah transaksi untuk melakukan secara bersamaan.

innodb_thread_sleep_delay menetapkan jumlah milidetik yang dapat dinonaktifkan oleh InnoDB sebelum masuk kembali ke antrian InnoDB. Standarnya adalah 10.000 (10 detik).

innodb_read_io_threads dan innodb_write_io_threads (keduanya sejak MySQL 5.1.38) mengalokasikan jumlah utas untuk membaca dan menulis. Default adalah 4 dan maksimum 64.

innodb_replication_delay memberlakukan keterlambatan utas pada seorang budak saat innodb_thread_concurrency tercapai.

Berikut ini adalah tulisan saya di MySQL 5.5 dan mengaktifkan banyak core untuk InnoDB

RolandoMySQLDBA
sumber
2

Konsultan MySQL Terkemuka Percona- menawarkan wizard konfigurasi MySQL . Ini memungkinkan Anda untuk mengonfigurasi my.cnf/my.initergantung pada konfigurasi sistem Anda.

Orang-orang Percona juga telah merilis buku berjudul " MySQL Kinerja Tinggi ". Edisi ketiga baru-baru ini dirilis, dan mencakup penyetelan dengan sangat rinci.

Mahesh Patil
sumber
apakah nilai-nilai ini yang mereka sarankan untuk kinerja yang baik, atau hanya memuntahkan apa yang saya masukkan?
OpenCoderX
1

Penggunaan memori: lihat http://mysql.rjweb.org/doc.php/memory (Sebagian besar lagu tidak akan membuat perbedaan yang berarti.)

max_heap_table_size = 4000M sangat tinggi! Jika 4 pengguna membutuhkannya, Anda kehabisan RAM dan bertukar. Bertukar menyakiti kinerja lebih dari apa pun.

Pertanyaan yang membutuhkan lebih dari beberapa detik: Pertanyaan harus dipelajari untuk peningkatan; berikan SHOW CREATE TABLE; TAMPILKAN STATUS TABEL; JELASKAN SELECT

Rick James
sumber
0

Anda dapat mempertimbangkan opsi otger juga. Seperti PostgreSQL di FreeBSD. Tetapi swiching dari Windows ke Linux akan meningkatkan kinerja Anda.

ilhan
sumber