Açıklanamayan InnoDB zaman aşımları


10

Son zamanlarda zaman aşımına uğramış bazı temel güncellemeleri görüyorum ve nedenini belirleyemedim. Bir örnek:

// # Sorgu_zamanı: 51 Kilit_zamanı: 0 Satır_sayısı: 0 Satır_ayrıca: 0

UPDATE photos SET position = position + 1 WHERE (photo_album_id = 40470);

Aynı günlük Lock_time> 0 ile giriş içermiyor. Çalışırken show innodb statusilgili kilitler de gösterilmiyor. Bu sorun, uygulama sunucusu günlüklerime ( Mysql::Error: Lock wait timeout exceededmysql-slow log'da karşılık gelen her girişle ilgili bir hata gösteren) dayalı en az 5 farklı tabloyu etkiliyor gibi görünüyor .

Buradan nereye gidileceğine dair bir fikrin var mı? Her yöne çıkmaz sokaklar vuruyorum. Teşekkürler.

DÜZENLE:

TABLO `fotoğraflar` OLUŞTUR (
  `id` int (11) NULL DEĞİL auto_increment,
  `type` varchar (255) BOŞ DEĞİL,
  `photo_album_id` int (11) BOŞ DEĞİL,
  `user_id` int (11) BOŞ DEĞİL,
  `title` varchar (255) varsayılan 'Adsız',
  "açıklama" metni,
  `credit` varchar (255) varsayılan NULL,
  `photo_file_name` varchar (255) varsayılan NULL,
  "photo_content_type` varchar (255) varsayılan NULL,
  `photo_file_size` int (11) varsayılan NULL,
  `photo_updated_at` datetime varsayılan NULL,
  `pozisyon` int (11) varsayılan '0',
  `views` int (11) varsayılan '0',
  `klasör` varchar (255) varsayılan NULL,
  `` tinyint (1) varsayılan '0' yayınlandı,
  `yayımlandı_t` datetime varsayılan NULL,
  `created_at` datetime varsayılan NULL,
  `updated_at` datetime varsayılan NULL,
  `album_published` tinyint (1) varsayılan '0',
  `comment_count` int (11) varsayılan '0',
  `audio_file_name` varchar (255) varsayılan NULL,
  `audio_content_type` varchar (255) varsayılan NULL,
  `audio_file_size` int (11) varsayılan NULL,
  `audio_updated_at` datetime varsayılan NULL,
  `kapak` tinyint (1) varsayılan '0',
  `slug` varchar (255) varsayılan NULL,
  `comments_count` int (11) varsayılan '0',
  `delete_from_s3` tinyint (1) varsayılan '0',
  `batch`t int (11) varsayılan NULL,
  `ses` varchar (255) varsayılan NULL,
  BİRİNCİL ANAHTAR (`id`),
  KEY `index_photos_on_album_published` (` album_published`),
  ANAHTAR `index_photos_on_batch` (` batch`),
  ANAHTAR `index_photos_on_comment_count` (` comment_count`),
  ANAHTAR `index_photos_on_created_at` (` oluşturulan_at`),
  ANAHTAR `index_photos_on_delete_from_s3` (` delete_from_s3`),
  ANAHTAR `index_photos_on_photo_album_id` (` photo_album_id`),
  ANAHTAR `index_photos_on_published` (` yayınlandı`),
  ANAHTAR `index_photos_on_published_at` (` yayımlandı_at`),
  ANAHTAR `index_photos_on_type` (` tür '),
  ANAHTAR `index_photos_on_user_id` (` user_id`)
) MOTOR = InnoDB AUTO_INCREMENT = 42830 VARSAYILAN CHARSET = utf8

Aptalca soru: Bu tabloda hangi indeksler var?
Gaius

Merhaba, lütfen düzenlemeye bakın.
mvbl fst

Hmm, bu sinir bozucu çünkü Oracle'da teşhis edilmesi çok kolay, sadece 10046 izleme seviyesi 12'yi ayarladınız ve tam olarak ne yaptığını size söyleyecek . Bunun hakkında biraz daha düşüneceğim.
Gaius

Ben bir InnoDB tablo ile benzer bir sorun yaşıyorum, bu artış ile ilgili bir şey olduğunu düşünüyorum. Ben yapıyorum: UPDATE table SET <field>=<field>+1 WHERE <pk_field>=1;Masam çok daha basit. Rastgele bu, aldığınız hataya neden olur. Sürümüm: 5.1.39. Bugün anlamaya çalışırken biraz zaman harcıyorum, bu yüzden bir şey bulursam güncelleyeceğim

Teşekkürler, pls bana ne bulduğunuzu bildirin, hala bunu anlayamadık.
mvbl fst

Yanıtlar:


3

Bunun gerçekten geç olduğunu biliyorum, ancak SHOW ENGINE INNODB STATUS çıktısını yakalamanız gerekiyor; sorguyu neden beklediğini görmek için

Belirli bir süre boyunca çok fazla gerçekleşirse, her x saniyede bir çıktıyı almak ve onu yakalamayı (veya belki de yapay olarak yükü oluşturmak) umarsınız.


0

Ben veritabanını normalleştirmek söyleyebilirim - ve propper indeksleri ekleyin.

Tek bir fotoğrafın ait olduğu albümle ilgili tüm bilgileri taşıması gerekmez - bu albümler için ayrı bir tablo için ağlar - ve yalnızca fotoğraflı kimlik <-> albumID eşlemesini içeren bir ilişki tablosu - varsa - fotoğrafçı için de geçerlidir (ayrı tablo ve photoID ile photographerID arasında bir eşleme tablosu

İlk başta sorgularınız biraz daha karmaşık hale gelebilir, ancak bilgiler artık mantıksal olarak bölünmüş ve aynı zamanda bununla ilgili bir RDBMS kullanıyorsunuz .. veriler ve ilişkileri

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.