У меня есть база данных 150G - 300 Mio записей и я хочу восстановить ее (gz SQL Dump) на MariaDB 10.3, но восстановление не удалось, потому что sql сервер ушел. Я пытался увеличить max_allowed_packet до максимума в 1G, это занимает на 20G больше, чем раньше, но каждый раз получал одну и ту же ошибку.
error.log
--Thread 140190396552960 has waited at btr0cur.cc line 1357 for 241.00 seconds the semaphore: SX-lock on RW-latch at 0x7f65a0265500 создан в файле dict0dict.cc line 2130 писатель (id потока 140075647571712) зарезервировал его в режиме SX количество читателей 0, флаг ожидания 1, слово_блокировки: 10000000 Последний раз запись была заблокирована в файле dict0stats.cc строка 1969 2020-11-09 23:12:33 0 [Note] InnoDB: Ожидание семафора: --Thread 140190396552960 ждал семафор в btr0cur.cc line 1357 в течение 241.00 секунд: SX-lock на RW-защелке по адресу 0x7f65a0265500 создан в файле dict0dict.cc строка 2130 писатель (id потока 140075647571712) зарезервировал его в режиме SX количество читателей 0, флаг ожидания 1, слово_блокировки: 10000000 Последний раз запись была заблокирована в файле dict0stats.cc строка 1969 InnoDB: ###### Запуск InnoDB Monitor на 30 секунд для печати диагностической информации: InnoDB: Pending reads 0, writes
Есть ли другая переменная, которую я могу настроить.
max_connections = 2000
connect_timeout = 15
wait_timeout = 1200
max_allowed_packet = 1G
thread_cache_size = 128
sort_buffer_size = 9M
bulk_insert_buffer_size = 32M
tmp_table_size = 2G
max_heap_table_size = 2G
myisam_recover_options = BACKUP
key_buffer_size = 128M
open-files-limit = 5000
table_open_cache = 4000
myisam_sort_buffer_size = 512M
concurrent_insert = 2
read_buffer_size = 2M
read_rnd_buffer_size = 1M
net_read_timeout = 15600
net_write_timeout = 15600
default_storage_engine = InnoDB
innodb_buffer_pool_size = 100G
innodb_log_buffer_size = 1G
innodb_file_per_table = 1
innodb_open_files = 4000
innodb_io_capacity = 200000
innodb_flush_method = O_DIRECT
Вы пытались установить эти переменные:
innodb_stats_presistent='OFF'
innodb_lock_mode=2
обеспечение в ваших таблицах нет значений автоинкремента, и посмотрите, исчезла ли проблема, приведенный выше журнал ошибок, похоже, является проблемой для SX-lock. В основном InnoDB внутренне использует реализацию rw-lock для обеспечения согласованности внутренних ресурсов и rw -lock имеет 2 типа S-lock (общий) и X-lock (исключенный). Таким образом, согласно вашему журналу ошибок, мы видим SX-lock в семафоре, поэтому, если предположить, что это может быть конфликтом при записи в таблицу Innodb. Попробуйте и посмотрите, поможет ли это.
Попробуйте уменьшить переменные буферного пула Innodb до тех пор, пока данные не будут загружены, например, поскольку у вас выделено 100G, поэтому уменьшите его до 5G размера innodb-buffer-pool-size , завершите загрузку данных, а затем вернитесь к тому же значению, которое было 100G, посмотрим, поможет ли это.