Aplikasi saya sangat intensif basis data. Saat ini, saya menjalankan MySQL 5.5.19 dan menggunakan MyISAM, tetapi saya sedang dalam proses migrasi ke InnoDB. Satu-satunya masalah yang tersisa adalah kinerja checksum.
Aplikasi saya melakukan sekitar 500-1000 CHECKSUM TABLE
pernyataan per detik di masa puncaknya, karena GUI klien sedang mem-polling database secara konstan untuk perubahan (ini adalah sistem pemantauan, jadi harus sangat responsif dan cepat).
Dengan MyISAM, ada checksum langsung yang dihitung sebelumnya pada modifikasi tabel dan SANGAT cepat. Namun, tidak ada yang seperti itu di InnoDB. Jadi, CHECKSUM TABLE
SANGAT lambat.
Saya berharap dapat memeriksa waktu pembaruan terakhir dari tabel, Sayangnya, ini tidak tersedia di InnoDB juga. Saya buntu sekarang, karena tes telah menunjukkan bahwa kinerja aplikasi turun drastis.
Ada terlalu banyak baris kode yang memperbarui tabel, jadi menerapkan logika dalam aplikasi untuk mencatat perubahan tabel adalah hal yang mustahil.
Apakah ada metode cepat untuk mendeteksi perubahan dalam tabel InnoDB?
sumber
Saya pikir saya sudah menemukan solusinya. Untuk beberapa waktu saya melihat Percona Server untuk mengganti server MySQL saya, dan sekarang saya pikir ada alasan bagus untuk ini.
Server Percona memperkenalkan banyak tabel INFORMATION_SCHEMA baru seperti INNODB_TABLE_STATS, yang tidak tersedia di server MySQL standar. Saat kamu melakukan:
Anda mendapatkan jumlah baris aktual dan penghitung. The dokumentasi resmi mengatakan berikut tentang bidang ini:
Jadi penghitung ini membungkus sesekali, tetapi Anda dapat membuat checksum dari jumlah baris dan penghitung, dan kemudian dengan setiap modifikasi tabel Anda mendapatkan checksum yang unik. Misalnya:
Saya akan melakukan upgrade server saya ke server Percona jadi ini tidak masalah bagi saya. Mengelola ratusan pemicu dan menambahkan bidang ke tabel adalah masalah besar untuk aplikasi ini, karena sangat terlambat dalam pengembangan.
Ini adalah fungsi PHP yang saya buat untuk memastikan bahwa tabel dapat dicek dengan mesin apa pun dan server yang digunakan:
Anda bisa menggunakannya seperti ini:
Saya harap ini menghemat masalah bagi orang lain yang memiliki masalah yang sama.
sumber
Anda harus memperbarui ke Mysql v5.6 + pada versi itu innodb juga memiliki dukungan untuk tabel checksum. http://dev.mysql.com/doc/refman/5.6/en/checksum-table.html
selain itu, solusi ideal adalah jika klien Anda tidak melakukan polling untuk hasil secara konstan, tetapi sebaliknya Anda yang mendorong data baru dan yang diubah kapan dan jika itu tersedia. Itu akan lebih cepat dan lebih sedikit memuat di server. jika Anda menggunakan gui berbasis web, Anda harus melihat ke APE http://ape-project.org/ atau proyek serupa lainnya.
sumber
Jika Anda sebagian besar menambahkan ke tabel, Anda bisa mengaitkan AUTO_INCREMENT sebagai ukuran pembaruan.
Tapi saya lebih suka merujuk ke sumber otside seperti penghitung di Memcached yang akan Anda tambahkan setiap kali Anda mengubah sesuatu di database.
sumber
Anda dapat mencoba melakukan hal berikut:
Ini mengembalikan angka yang meningkat dengan setiap pembaruan tabel, melacaknya akan memungkinkan untuk mendeteksi perubahan.
Catatan penting: nilainya diubah segera setelah UPDATE, bukan setelah COMMIT. Jadi, Anda mungkin tidak melihat perubahan jika modifikasi dilakukan di dalam transaksi lain yang tidak selesai.
sumber
Jawaban ini tidak ada hubungannya dengan versi atau tipe database mysql, saya ingin tahu apakah pernyataan pembaruan membuat perubahan DAN melakukan ini dalam kode php saya ..
Membuat tabel dummy dengan satu catatan dan satu bidang yang ingin saya kueri untuk mendapatkan nilai current_timestamp mysql.
Ke tabel data yang sedang diperbarui, tambahkan bidang cap waktu dan gunakan opsi mysql "ON UPDATE CURRENT_TIMESTAMP"
Dibandingkan # 1 dan # 2
Ini tidak akan berfungsi 100% dari waktu tetapi untuk aplikasi saya itu adalah solusi yang sederhana dan bagus. Semoga ini bisa membantu seseorang
sumber