MySQL Сервер перестает работать по заданному c запросу, отправленному из приложения C# - PullRequest
0 голосов
/ 15 апреля 2020

Я занимаюсь разработкой программы C#, которая взаимодействует с базой данных, работающей на MySQL сервере.

Из множества запросов, которые эта программа выполняет к этой базе данных, один из них выглядит следующим образом.

Как отправлено из C# программы:

string query = $"select * from ((select id,title from wikipedia where lang like ('{string.Join(",", pLang)}') and title<>'') union all (select id, redirect 'title' from redirect where lang like '{string.Join(",", pLang)}' and redirect<>''))r;";

В качестве строки, отправленной в базу данных:

select * from ((select id,title from wikipedia where lang like ('en') and title<>'') union all (select id, redirect 'title' from redirect where lang like 'en' and redirect<>''))r;

Иногда, MySQL Сервер этой базы данных отключается при выполняя этот конкретный c запрос (такого еще не было ни с одним другим запросом) Впервые я обнаружил эту проблему через пару дней после перехода от небольшого подмножества данных, использованных для тестирования, к большему набору данных. с которой нужно будет периодически работать.

В настоящее время таблицы, используемые в этом запросе, содержат ~ 7800000 и ~ 699000 строк соответственно.

Всякий раз, когда это происходит, сервер выключается сразу после отправки программой query.

Журнал ошибок:

10:03:31 UTC - mysqld got exception 0xc0000005 ;
Most likely, you have hit a bug, but this error can also be caused by malfunctioning hardware.
Thread pointer: 0x12d7ded4390
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong...
7ff7d8e82c1e    mysqld.exe!?strncpyz@Event_reader@binary_log@@QEAAXPEAD_K1@Z()
7ff7d8e7f8f9    mysqld.exe!?strncpyz@Event_reader@binary_log@@QEAAXPEAD_K1@Z()
7ff7d7f577ed    mysqld.exe!?free_tmp_table@@YAXPEAVTHD@@PEAUTABLE@@@Z()
7ff7d7efb21f    mysqld.exe!?deallocate@?$allocator@V?$unique_ptr@VRowIterator@@V?$Destroy_only@VRowIterator@@@@@std@@@std@@QEAAXQEAV?$unique_ptr@VRowIterator@@V?$Destroy_only@VRowIterator@@@@@2@_K@Z()
7ff7d7efa3f7    mysqld.exe!?cleanup@SELECT_LEX@@QEAA_NPEAVTHD@@_N@Z()
7ff7d7efa4ff    mysqld.exe!?cleanup@SELECT_LEX_UNIT@@QEAA_NPEAVTHD@@_N@Z()
7ff7d7d83289    mysqld.exe!?mysql_execute_command@@YAHPEAVTHD@@_N@Z()
7ff7d7d839c4    mysqld.exe!?mysql_parse@@YAXPEAVTHD@@PEAVParser_state@@@Z()
7ff7d7d7cb60    mysqld.exe!?dispatch_command@@YA_NPEAVTHD@@PEBTCOM_DATA@@W4enum_server_command@@@Z()
7ff7d7d7dade    mysqld.exe!?do_command@@YA_NPEAVTHD@@@Z()
7ff7d7bfcfc8    mysqld.exe!?modify_thread_cache_size@Per_thread_connection_handler@@SAXK@Z()
7ff7d8e087a1    mysqld.exe!?strncpyz@Event_reader@binary_log@@QEAAXPEAD_K1@Z()
7ff7d8a4606c    mysqld.exe!?my_thread_join@@YAHPEAUmy_thread_handle@@PEAPEAX@Z()
7ffe89991ffa    ucrtbase.dll!_o_exp()
7ffe8a577974    KERNEL32.DLL!BaseThreadInitThunk()
7ffe8d38a261    ntdll.dll!RtlUserThreadStart()

Trying to get some variables.
Some pointers may be invalid and cause the dump to abort.
Query (12d7e5f0c98): select * from ((select id,title from wikipedia where lang like ('en') and title<>'') union all (select id, redirect 'title' from redirect where lang like 'en' and redirect<>''))r
Connection ID (thread ID): 66
Status: NOT_KILLED

The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains
information that should help you find out what is causing the crash.
2020-04-15T10:04:19.511132Z 0 [Warning] [MY-010915] [Server] 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
2020-04-15T10:04:19.515876Z 0 [System] [MY-010116] [Server] C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe (mysqld 8.0.19) starting as process 5660
2020-04-15T10:04:22.501909Z 0 [System] [MY-010229] [Server] Starting XA crash recovery...
2020-04-15T10:04:22.510760Z 0 [System] [MY-010232] [Server] XA crash recovery finished.
2020-04-15T10:04:23.072748Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2020-04-15T10:04:23.119390Z 0 [System] [MY-010931] [Server] C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe: ready for connections. Version: '8.0.19'  socket: ''  port: 3306  MySQL Community Server - GPL.
2020-04-15T10:04:23.276080Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060

Медленный журнал:

SET timestamp=1586941541;
select distinct(id) from wikipedia where lang like ('es');
# Time: 2020-04-15T09:09:10.701455Z
# User@Host: root[root] @ localhost [127.0.0.1]  Id:    63
# Query_time: 104.064637  Lock_time: 0.000074 Rows_sent: 6578886  Rows_examined: 8306925
SET timestamp=1586941646;
select distinct(id) from wikipedia where lang like ('en');
# Time: 2020-04-15T10:02:11.919601Z
# User@Host: root[root] @ localhost [127.0.0.1]  Id:    65
# Query_time: 26.851506  Lock_time: 0.001500 Rows_sent: 2969442  Rows_examined: 2969442
SET timestamp=1586944905;
select * from ((select id,title from wikipedia where lang like ('es') and title<>'') union all (select id, redirect 'title' from redirect where lang like 'es' and redirect<>''))r;
C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe, Version: 8.0.19 (MySQL Community Server - GPL). started with:
TCP Port: 3306, Named Pipe: MySQL
Time                 Id Command    Argument

За последнюю неделю я пытался найти причину этой проблемы, но Я не могу воспроизвести это по своему желанию. Иногда на запрос можно ответить без проблем (при отправке из программы), как показано в медленном журнале:

# Time: 2020-04-15T06:04:55.984006Z
# User@Host: root[root] @ localhost [127.0.0.1]  Id:    60
# Query_time: 74.830395  Lock_time: 0.000663 Rows_sent: 12234243  Rows_examined: 12234243
SET timestamp=1586930621;
select * from ((select id,title from wikipedia where lang like ('en') and title<>'') union all (select id, redirect 'title' from redirect where lang like 'en' and redirect<>''))r;

Я также пытался выполнить запрос непосредственно из MySQL Workbench несколько раз (но снова не воспроизводит завершение работы сервера. Как показано ниже)

LIMIT 0, 1000;
# Time: 2020-04-15T14:33:01.406478Z
# User@Host: root[root] @ localhost [::1]  Id:    15
# Query_time: 22.342847  Lock_time: 0.002968 Rows_sent: 12234315  Rows_examined: 12234315
SET timestamp=1586961159;
select * from ((select id,title from wikipedia where lang like ('en') and title<>'') union all (select id, redirect 'title' from redirect where lang like 'en' and redirect<>''))r limit 1000000000;
# Time: 2020-04-15T14:36:12.223454Z
# User@Host: root[root] @ localhost [::1]  Id:    15
# Query_time: 22.223628  Lock_time: 0.000161 Rows_sent: 12234315  Rows_examined: 12234315
SET timestamp=1586961349;
select * from ((select id,title from wikipedia where lang like ('en') and title<>'') union all (select id, redirect 'title' from redirect where lang like 'en' and redirect<>''))r limit 1000000000;

Спасибо, что прочитали это далеко, и заранее благодарны за любую помощь / предложение, которое вы можете предоставить.

1 Ответ

0 голосов
/ 15 апреля 2020

Согласно сообщению об ошибке:

Скорее всего, вы столкнулись с ошибкой, но эта ошибка также может быть вызвана неисправным оборудованием.

Первое сделать было бы исключить неисправное оборудование (скорее всего, ОЗУ). Поскольку похоже, что вы работаете на Windows, используйте встроенную Windows Memory Diagnosti c для запуска стресс-теста вашей оперативной памяти.

Затем просмотрите список шагов, которые необходимо предпринять, когда MySQL Сервер падает на https://dev.mysql.com/doc/refman/8.0/en/crashing.html

Если ничего из этого не помогло, вы можете сообщить об ошибке (на https://bugs.mysql.com/), следуя инструкциям на https://dev.mysql.com/doc/refman/8.0/en/bug-reports.html

Обратите внимание, что очень поможет иметь последовательно воспроизводимый контрольный пример, поэтому разработчики MySQL могут воспроизвести проблему и исправить ее. В противном случае ошибка может быть закрыта «не воспроизводимо». Чем больше вы можете сделать, чтобы cra sh происходил последовательно, тем лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...