Batas waktu InnoDB yang tidak dapat dijelaskan


10

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 statusjuga tidak mengungkapkan kunci terkait. Masalah ini tampaknya mempengaruhi setidaknya 5 tabel berbeda berdasarkan log server aplikasi saya (yang menunjukkan Mysql::Error: Lock wait timeout exceededkesalahan 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

Pertanyaan konyol: indeks apa yang Anda miliki di meja itu?
Gayus

Hai, silakan lihat hasil edit.
mvbl fst

Hmm, ini menjengkelkan karena ini sangat mudah untuk mendiagnosa di Oracle, Anda hanya mengatur 10046 jejak tingkat 12 dan akan memberitahu Anda persis apa yang dilakukannya. Saya akan memikirkannya lagi.
Gayus

Saya mengalami masalah serupa dengan tabel InnoDB, saya pikir itu ada hubungannya dengan kenaikan. Saya lakukan: 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.

Terima kasih, tolong beri tahu saya apa yang Anda ketahui, kami masih belum menemukan yang ini.
mvbl fst

Jawaban:


3

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).


0

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.