Очень медленный UPDATE WHERE ORDER BY в mariaDB по вторичному ключу
Перенес данные с серера Ubuntu 16.04 + mySQL (5.7.29) на более мощный сервер Ubuntu 20.04 + mariaDB (10.5.11) и начались тормоза при непрерывном выполнении одного запроса 40ка потоками:
UPDATE `table1` SET dt=40000000$i WHERE dt<4000000000 ORDER BY dt LIMIT 1
где строковая $i принимает значение от '01' до '40', взависимости от номера потока, для поля dt построен вторичный ключ. Этим запросом, я помечаю записи, которые в дальнейшем буду отдельно обрабатывать.
В mytop наблюдаю, что запросы выстраиваются в очередь и выполняются очень долго.
Для СУБД mySQL этот запрос не вызывает вопросов и выполняется мгновенно, теми же 40ка потоками.
EXTENDED EXPLAIN для запроса на старой сервере (где все летает):
На новом сервере с mariaDB:
таблица table1 (innoDB) содержит порядка 200млн записей:
CREATE TABLE `table1` (
`id` INT(9) UNSIGNED NOT NULL AUTO_INCREMENT,
`dt` INT(10) UNSIGNED NULL DEFAULT '0',
# поля с данными
PRIMARY KEY (`id`) USING BTREE,
INDEX `dt` (`dt`) USING BTREE
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
Пробовал сортировку по первичному ключу - тормозов нет. (но этот способ не подходит)
Скажите, почему так происходит? в mySQL все летает, в mariaDB - жуткие тормоза. Возможно нужно как-то иначе настроить конфиг mariaDB? На какие параметры обратить внимание?
Вот некоторые установки mariaDB:
innodb_lock_wait_timeout=600
innodb_buffer_pool_size=90G
innodb_buffer_pool_instances=8 (хотя в документации пишут, что параметр устарел)
innodb_flush_method=O_DIRECT_NO_FSYNC (пробовал разные варианты - не помогло)
и еще некоторые параметры со значениями равными значениям на предыдущем сервере:
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 128M
table_open_cache = 256
sort_buffer_size = 32M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M




