LINUX.ORG.RU

Как отследить запросы к БД MySQL

 


0

2

Всем доброго времени суток!

Признаться, не знаю как описать чего хочу и возможно поэтому сам в тупике.

Возникла ситуация, когда написали заливку определенной информации в БД используя PHP и перед тем как добавить запись в БД выполняется запрос на поиск дубликатов заливаемой информации. Неискушенный пользователь, который заливает информацию радостно многократно нажимает кнопку «залить» и в этот момент со стороны сервера картина очень не радужная. Процессорные мощности улетают полностью, скапливаются запросы к БД и т.д.

Я понимаю, что нужно переписать скрипт. Но, проблема в том, что я не понимаю как подобное поведение можно отследить. Т.е. по идее мне нужно взять из очереди запросов повторяющиеся, которые выполняются больше определенного количества времени? Или как подойти к поиску того, что является проблемой если предположить, что идет спам каких-то запросов к БД?

P.S. Вполне может быть, что я вообще не так вижу проблему и к её поиску нужно подходить иначе. Поэтому буду благодарен за советы по отслеживанию подобных вещей.

Если поиск дублей длится долго, нужно отображать это как-то пользователю, он видит, что ничего не меняется, вот и тыкает кнопку.

goingUp ★★★★★ ()

У меня так:

  1. На стороне клиента по нажатию кнопки - убираю её в disbaled.
  2. Беру метку времени начала процесса.
  3. В целевой таблице БД имею ограничения (CONSTRAINT UNIQUE) на поля «Метка времени» + все идентификационные поля. БД сама не даст вставить дубликаты.
  4. Чтобы была обратная связь о процессе - Ajax порциями с limit, offset вставляю и рисую ProgressBar.

Так делаю снимки состояния БД.
Но, думаю, принцип «отбраковки дублирующих записей средствами БД, без ручного поиска перед вставкой» и на вашей задаче должен работать.

Toxo1 ()

Заливают файлы? Тогда считай sha256 от них, и потом ищи этот хэш в базе. По колонке с хэшами сделай уникальный ключ, тогда все будет очень быстро.

slvrn ★★★ ()
Ответ на: комментарий от goingUp

Это понятно, просто человек, который это написал не подумал о таком исходе. И два дня выясняли, что же переодически убивает виртуалку и выяснили совершенно случайно. Я хочу понять как в подробной ситуации отлавливать проблему. Т.е. я вижу, что кто-то обращаясь к сайту начинает нагружать сервер, вижу, что копятся запросы к БД, но как отследить каким запросом базу убивают не могу сообразить.

hanharr ()
Последнее исправление: hanharr (всего исправлений: 1)