Длинный запрос для тестирования
Я пытаюсь некоторую отказоустойчивость и в приложении, и кто-нибудь знает о долгом выполнении запроса с использованием таблиц mysql по умолчанию?
Идея состоит в том, чтобы запустить этот запрос, завершить работу mysqld, чтобы увидеть, обнаруживает ли мое приложение ошибку и пытается ли подключиться к другому mysqld.
Спасибо
3 ответа
Даже самый длинный запрос не приведет к сбою mysqld! Вы можете потерять соединение, в зависимости от используемого вами драйвера, но я верю, что сервер будет работать и работать до тех пор, пока не будет завершен. И долго выполняющиеся запросы будет сложно сделать со стандартными таблицами. По моему опыту, изменение индексов на очень больших (10 или лучше 100 миллионов строк, в зависимости от скорости / скорости вашего сервера) будет занимать его довольно долго
SLEEP()
функция может помочь вам. SELECT SLEEP(10);
возвращается 0
через 10 секунд.
Просто сделайте несколько перекрестных объединений и сохраните в таблицу:
create table dum as
select *
from information_schema.tables t cross join
information_schema.tables t cross join
information_schema.tables t cross join
information_schema.tables t cross join
information_schema.tables t cross join
information_schema.tables t cross join
information_schema.tables t cross join
information_schema.tables t;
Или, если вы не хотите создавать таблицу, может быть что-то вроде этого:
select count(*)
from information_schema.tables t cross join
information_schema.tables t cross join
information_schema.tables t cross join
information_schema.tables t cross join
information_schema.tables t cross join
information_schema.tables t cross join
information_schema.tables t cross join
information_schema.tables t;
Я только что понял - я не знаю, если information_schema.tables
на самом деле есть какие-либо строки в новой установке. Но ты получил идею. В худшем случае это будет что-то вроде:
select count(*)
from (select 1 as n union all select 2 as n union all select 3 as n union all select 4 as n) n1 cross join
(select 1 as n union all select 2 as n union all select 3 as n union all select 4 as n) n2 cross join
(select 1 as n union all select 2 as n union all select 3 as n union all select 4 as n) n3 cross join
(select 1 as n union all select 2 as n union all select 3 as n union all select 4 as n) n4 cross join
(select 1 as n union all select 2 as n union all select 3 as n union all select 4 as n) n5 cross join
(select 1 as n union all select 2 as n union all select 3 as n union all select 4 as n) n6 cross join
(select 1 as n union all select 2 as n union all select 3 as n union all select 4 as n) n7 cross join
(select 1 as n union all select 2 as n union all select 3 as n union all select 4 as n) n8 cross join
(select 1 as n union all select 2 as n union all select 3 as n union all select 4 as n) n9;
Кстати, это забавный вопрос. Так много времени в моей жизни посвящено тому, чтобы запросы выполнялись быстрее, поэтому забавно думать о противоположной проблеме.