Saya memiliki situs Drupal, dan saya menderita masalah kinerja. Saya menemukan Bagaimana cara mengubah database dari MyISAM ke InnoDB? menunjukkan bahwa kinerja dapat meningkat dengan beralih.
Bagaimana saya bisa tahu apakah database MySQL saya adalah InnoDB, atau MyISAM?
performance
database
chrisjlee
sumber
sumber
Jawaban:
Anda dapat menjalankan kueri khusus:
untuk membuat daftar semua tabel di database Anda dan mesin yang digunakan untuk masing-masing.
Atau Anda bisa login ke database Anda menggunakan phpMyAdmin dan pilih database Anda ... Anda akan melihat mesin di
Type
kolom dalam daftar tabel.Secara pribadi saya akan merekomendasikan Navicat untuk MySQL , ini adalah MySQL GUI yang sangat bagus dan membuat mengetahui hal-hal seperti ini sangat mudah.
Sumber: http://www.electrictoolbox.com/mysql-table-storage-engine/
sumber
SHOW TABLE STATUS
. Untuk mendapatkan hitungan sederhana dari berapa banyak tabel di setiap jenis mesin, ituSELECT ENGINE,COUNT(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY ENGINE
.Pengalaman terbaik saya adalah memutuskan berdasarkan tabel. InnoDB bagus, karena dapat menghindari penguncian tabel (tidak ada proses lain yang dapat membaca dari tabel saat satu proses menulis), tetapi performanya sangat buruk dengan COUNT () yang sering digunakan untuk kueri pager.
(Sunting: silakan lihat komentar Clives di bawah)
Ada juga implikasi pada pengaturan MySQL Anda, tergantung DB mana yang Anda gunakan. Jika Anda memiliki akses ke server, mysqltuner harus menjadi langkah pertama Anda, untuk memeriksa konfigurasi:
https://github.com/rackerhacker/MySQLTuner-perl#readme
sumber
COUNT
query, menurut artikel ini dengan mantan manajer High Performance Group untuk MySQL meskipun hanya benar-benar mempengaruhi permintaan mengandungCOUNT(*)
tanpa sebuahWHERE
klausa.SELECT COUNT(*) FROM table
dapat kembali secara instan dengan nilai itu. InnoDB tidak, jadi harus memindai seluruh indeks kunci utama. Yang mengatakan, sementara Drupal melakukan banyak halSELECT COUNT(*)
, saya hanya bisa memikirkan satu tempat di seluruh kode yang melakukannya tanpaWHERE
klausa. Jadi, jangan gunakan MyISAM karena khawatir untuk edgecase khusus ini. InnoDB dengan kumpulan buffer ukuran yang layak akan lebih cepat untuk semua permintaan dunia nyata.Hanya mencoba hal-hal untuk mendapatkan situs web lebih cepat seperti mobil yang berubah secara membabi buta dan berharap Anda mendapatkan yang lebih cepat di lain waktu.
Pertama-tama coba buah-buahan yang menggantung rendah, jika tidak membantu, cobalah untuk menemukan hambatan yang sebenarnya.
Seringkali itu hanya permintaan DB lambat yang membutuhkan indeks, atau modul melakukan sesuatu dengan lambat.
Saya juga menemukan perbedaan besar antara hosters. Jika Anda memasang drupal baru di luar kotak, apakah kinerjanya oke? Jika tidak, ini saatnya mencari hoster lain.
sumber
FWIW situs Drupal 6.x hampir 20K node kami mengalami beberapa masalah kinerja dan saya memilih untuk memindahkan semua tabel ke InnoDB. Itu mudah dan cara saya mengatasinya adalah menggunakan mysqldump untuk membuang semua konten ke file sql, menggunakan editor (sed) untuk mengganti semua kemunculan MyISAM ke InnoDB kemudian memuat kembali database dari file itu. Salah satu sisi bawahnya adalah bahwa Anda tidak dapat memulihkan ruang dari database InnoDB (IIRC) tetapi selama Anda menyimpan tabel duplikat Anda dalam DB terpisah Anda seharusnya tidak memiliki masalah. Oh, dan kami memang melihat peningkatan kinerja yang signifikan. Dan karena kami memiliki empat contoh Drupal, banyaknya file tabel dihapus dari sistem file (ya, mereka terdapat di dalam file InnoDB itu sendiri). Ini adalah nilai $ 0,02 saya.
sumber
innodb_file_per_table
opsi.for tbl in $(mysql -Ne 'show tables' databasename); do mysql -e "ALTER TABLE $tbl ENGINE=InnoDB"; done
. Tambahkan opsi yang sesuai (-uroot -psomepass
, misalnya) ke keduanyamysql
jika diperlukan.Hanya kepala. Jika Anda menggunakan Drupal 6, Anda dapat menginstal modul DBTuner ; itu dapat dengan mudah memindahkan tabel Anda dari MyISAM ke InnoDB. Jadi ya, ada modul untuk itu!
sumber