Как протестировать mysql и локализовать проблему из PHP?
На одном из серверов MySQL работает чрезвычайно медленно (в 20-100 раз медленнее эталона) и по видимому не кэшируются.
Конфигурация сервера мне доподлинно неизвестна. Конфигурация сервера БД те более. Понятно только что он там в локалке. Доступа к серверу у меня нет.
Но я могу только через автодеплой заливать PHP файлы на этот сервер и исполнять их через браузер. Что я могу предпринять для локализации проблемы? Есть ли какие-то диагностические инструменты на php?
если проапдейтить значение в БД, а потом считать его - возвращается не оно, а старое значение
Может, там разные соединения для записи и чтения к разным серверам? Тогда записали на один сервер, читаем с другого, но туда из-за тупняков значение не успело реплицироваться. Иначе я не могу даже вообразить как такое может быть.
Алексей Уколов, не должно бы быть такого. Я объединял прям в одну строку и исполнял следующий зарос:
INSERT INTO b_option (MODULE_ID, NAME, VALUE)
VALUES ('repletest', 'repletest', '11')
ON DUPLICATE KEY UPDATE VALUE = '11';
SELECT
b_option.MODULE_ID AS MODULE_ID,
b_option.NAME AS NAME,
b_option.VALUE AS VALUE
FROM
b_option
WHERE
UPPER(
b_option.NAME
) like upper(
'repletest'
);
Значение записывается, потому что на следующем хите (соединении) отдается уже именно оно. Но в том же старое.
Впрочем этот вопрос снят - я проверил сейчас уже все нормально. Видимо девопс поправил на третий день после долгих объяснений что так быть не должно...
VasyaID, не, у меня просто нет доступа потому что я не девопс. Хотсингом занимается другой чел. Насколько я понимаю там какая-то облачная конфигурация.
Есть ли какие-то диагностические инструменты на php?
Да. Называются термином APM. Устанавливается и интегрируется агент APM и тот собирает необходимые метрики. Для некоторых APM есть веб-интерфейс и в них можно узнать на какие запросы тратится много времени или других ресурсов. Без APM можно только гадать.
Там стоит битрикс и в нем есть всякие метрики и отслеживание медленных запросов и все такое.
Тут дело не в том, что какие-то запросы тупят. Тупит сама база.
Например запрос:
SELECT
b_option.MODULE_ID AS MODULE_ID,
b_option.NAME AS NAME,
b_option.VALUE AS VALUE
FROM
b_option
WHERE
UPPER(
b_option.NAME
) like upper(
'repletest'
);
Выполняется почти секунду. В таблице всего несколько сотен записей и 5 полей. Он не должен столько выполнятся.
Александр Маджугин, так надо было сразу в вопрос чётко указать что за запрос и другую сопутствующую инфу.
Принято прикладывать схему таблиц и план запроса.
Хотя, сразу вижу, что используется LIKE (ик!). Задавай новый вопрос со всеми тех. подробностями.
Román Mirilaczvili, да там вообще пофиг какие запросы - они все тормозят. Просто медленно выполняются. Т.е. я делаю аналогичный запрос на тестовом и он выполняется 0,001 сек. И на проде и он выполняется 0,7 сек.
Виноват конечно LIKE?