Длинный запрос для тестирования

Я пытаюсь некоторую отказоустойчивость и в приложении, и кто-нибудь знает о долгом выполнении запроса с использованием таблиц 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;

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

Другие вопросы по тегам