Saya telah melihat beberapa pembaruan yang sangat mendasar, waktu habis akhir-akhir ini dan belum dapat menentukan penyebabnya. Sebuah contoh:
// # Query_time: 51 Lock_time: 0 Rows_sent: 0 Rows_examined: 0
UPDATE
photos
SET position = position + 1 WHERE (photo_album_id = 40470);
Log yang sama tidak memiliki entri dengan Lock_time> 0. Menjalankan show innodb status
juga tidak mengungkapkan kunci terkait. Masalah ini tampaknya mempengaruhi setidaknya 5 tabel berbeda berdasarkan log server aplikasi saya (yang menunjukkan Mysql::Error: Lock wait timeout exceeded
kesalahan terkait dengan setiap entri yang sesuai di log mysql-slow).
Ada ide ke mana harus pergi dari sini? Aku memukul jalan buntu ke segala arah. Terima kasih.
EDIT:
BUAT TABEL `foto` ( `id` int (11) BUKAN NULL auto_increment, `type` varchar (255) NOT NULL, `photo_album_id` int (11) TIDAK NULL, `user_id` int (11) TIDAK NULL, `title` varchar (255) default 'Tanpa Judul', teks `deskripsi`, `credit` varchar (255) default NULL, `photo_file_name` varchar (255) default NULL, `photo_content_type` varchar (255) default NULL, `photo_file_size` int (11) default NULL, `photo_updated_at` datetime default NULL, `position` int (11) default '0', `views` int (11) default '0', `folder` varchar (255) default NULL, `diterbitkan` tinyint (1) default '0', `publish_at` datetime default NULL, `Created_at` datetime default NULL, `updated_at` datetime default NULL, `album_published` tinyint (1) default '0', `comment_count` int (11) default '0', `audio_file_name` varchar (255) default NULL, `audio_content_type` varchar (255) default NULL, `audio_file_size` int (11) default NULL, `audio_updated_at` sebelumnya default NULL, `cover` tinyint (1) default '0', `slug` varchar (255) default NULL, `comments_count` int (11) default '0', `delete_from_s3` tinyint (1) default '0', `batch` int (11) default NULL, `audio` varchar (255) default NULL, KUNCI UTAMA (`id`), KEY `index_photos_on_album_published` (` album_published`), `Index_photos_on_batch` KUNCI (` batch`), `Index_photos_on_comment_count` KUNCI (` comment_count`), KEY `index_photos_on_created_at` (` Created_at`), `Index_photos_on_delete_from_s3` KUNCI (` delete_from_s3`), `Index_photos_on_photo_album_id` KUNCI (` photo_album_id`), `Index_photos_on_published` KUNCI (` diterbitkan`), `Index_photos_on_published_at` KUNCI (` publish_at`), `Index_photos_on_type` KUNCI (` type`), KEY `index_photos_on_user_id` (` user_id`) ) ENGINE = InnoDB AUTO_INCREMENT = 42830 DEFAULT CHARSET = utf8
mysql
query
innodb
locked-objects
mvbl fst
sumber
sumber
UPDATE table SET <field>=<field>+1 WHERE <pk_field>=1;
Meja saya jauh lebih sederhana. Secara acak ini menyebabkan kesalahan yang sama yang Anda dapatkan. Versi saya adalah: 5.1.39. Saya menghabiskan waktu hari ini untuk mencari tahu sehingga saya akan memperbarui jika saya menemukan sesuatu.Jawaban:
Saya tahu ini benar-benar terlambat, tetapi Anda benar-benar perlu menangkap output dari SHOW ENGINE INNODB STATUS; selama permintaan itu untuk melihat mengapa itu menunggu.
Jika itu sering terjadi selama waktu tertentu, akan mudah untuk hanya mengambil output itu setiap x detik dan berharap Anda menangkapnya (atau mungkin secara artifisial menghasilkan beban).
sumber
Saya akan mengatakan menormalkan basis data - dan menambahkan petunjuk yang tepat.
Satu foto tidak perlu membawa semua info tentang album yang dimilikinya - ini menyerukan tabel terpisah untuk album - dan tabel relasi yang hanya berisi pemetaan fotoID <-> albumID yang sama berlaku - jika disertakan - ke fotografer (Pisahkan tabel dan tabel pemetaan antara photoID dan photographerID
Pada awalnya mungkin terlihat bahwa pertanyaan Anda menjadi sedikit lebih rumit tetapi informasinya sekarang dibagi secara logis dan pada saat yang sama Anda menggunakan RDBMS untuk apa itu tentang .. data dan hubungan mereka
sumber