libmysql.dll 8.0.19 x64 has problem
Posted by: Alexey Nikitayev
Date: March 17, 2020 12:57AM

Hello!
I'm using libmysql.dll x64 version with Delphi FireDAC + MySQL Server 8.0.19.
About 10 transactions per second.
I'm using winapi call: timeBeginPeriod(1).

libmysql.dll (x64) of 5.7.28 is stable working.
But, libmysql.dll (x64) of 8.0.19 version producing error:

17-03-20 09:50:03 hnt Exception EMySQLNativeException: [FireDAC][Phys][MySQL] Lock wait timeout exceeded; try restarting transaction
17-03-20 09:50:03 hnt Exception occured at $0000000000D17B7A (Module "FireDAC.Phys.MySQLWrapper", Procedure "FireDAC.Phys.MySQLWrapper.TMySQLSession.ProcessError", Unit "", Line 0)
....

Server config:

# разбиение единого пула на указанное количество блоков
innodb_buffer_pool_instances=1
innodb_page_cleaners=1

#глобальные буферы
innodb_buffer_pool_size=2G
# innodb_change_buffer_max_size - процент от размера буфера для операций на изменение данных
innodb_change_buffer_max_size=50
key_buffer_size=128M
innodb_log_file_size=100M
# innodb_log_buffer_size - уменьшает загрузку диска при большом количестве INSERT, DELETE, UPDATE
innodb_log_buffer_size=100M
max_allowed_packet=16M

slow-query-log=1
long_query_time=5
max_connections=1000
table_open_cache=2000
tmp_table_size=100M
thread_cache_size=10
# innodb_thread_concurrency - автоматически настраивает ся во время установки сервера
# innodb_thread_concurrency=25
innodb_autoextend_increment=64
innodb_concurrency_tickets=5000
innodb_old_blocks_time=60000
innodb_stats_on_metadata=0
innodb_file_per_table=1
innodb_checksum_algorithm=0
max_allowed_packet=4M
max_connect_errors=100
open_files_limit=4161
table_definition_cache=1400
binlog_row_event_max_size=8K

max_heap_table_size=100M
# innodb_flush_method=normal - асинхронный ввод-вывод с использованием буфера windows
innodb_flush_method=normal
innodb-flush-neighbors=0
# innodb-flushing-avg-loops - отвечает за разгрузку ввода-вывода до указанного количества транзакций
innodb-flushing-avg-loops=1000
innodb_flush_sync=OFF
bulk_insert_buffer_size=20M
innodb_autoinc_lock_mode=2
innodb_read_io_threads=10
innodb_write_io_threads=10

# автоматическая очистка от bin файлов
#expire_logs_days=1 устаревший параметр
binlog_expire_logs_seconds=900

# кэш для отдельных запросов и транзакций. Не должен быть слишком большим, иначе сервер начинает тормозить
binlog_stmt_cache_size=256K
max_binlog_stmt_cache_size=1M
binlog_cache_size=512K
# max_binlog_cache_size совместно с net_buffer_length нужны для больших по размеру транзакций
max_binlog_cache_size=500M

# определяет размер файла бинлога, который используется при репликации. Mysql создаст новый файл, когда размер текущего файла достигнет лимита
max_binlog_size=100M

# Disabling this variable permits transaction commit instructions to be issued using multiple threads
binlog_order_commits=OFF
# параметры репликации
#slave_parallel_type=DATABASE
#slave_parallel_workers=4

# для каждого клиентского подключения. Больше - не значит лучше.
read_buffer_size=256K
read_rnd_buffer_size=256K
sort_buffer_size=256K
join_buffer_size=256K

#net_buffer_length нужен для больших по размеру транзакций
net_buffer_length=512K

#супер оптимизация
flush_time=0
back_log=200
innodb_flush_log_at_trx_commit=0
innodb_flush_log_at_timeout=10
sync_binlog=0
#binlog_group_commit_sync_delay=1000
# innodb_lock_wait_timeout - время в секундах на ожидание выполнения транзакции
innodb_lock_wait_timeout=150
# не получать имя хоста для IP адреса клиента
skip-name-resolve=ON
innodb_use_native_aio=ON
#innodb_numa_interleave=1
# Число потоков, которые могут завершать транзакции в то же самое время. Значение 0 (значение по умолчанию) разрешает любое число транзакций одновременно.
innodb_commit_concurrency=0

# настройка ввода-вывода, максимальное количество дисковых операций ввода-вывода HDD=400, SSD=2000+
innodb_io_capacity=1000
innodb_io_capacity_max=2000

#загрузка предыдущего состояни пула MySQL
innodb_buffer_pool_load_at_startup=ON
innodb_buffer_pool_dump_at_shutdown=ON

# необязательные параметры
#optimizer_switch=use_invisible_indexes=on
#optimizer_switch=batched_key_access=on

#mysql 8
#innodb_idle_flush_pct=1000
# innodb_parallel_read_threads - Defines the number of threads that can be used for parallel clustered index reads
#innodb_parallel_read_threads=16
#internal_tmp_mem_storage_engine=MEMORY
#temptable_max_ram=100M
# https://severalnines.com/database-blog/mysql-performance-benchmarking-mysql-57-vs-mysql-80
#innodb_log_spin_cpu_abs_lwm = 80
#innodb_log_spin_cpu_pct_hwm = 50
#innodb_log_wait_for_flush_spin_hwm = 400

[mysqldump]
quick
quote-names

Options: ReplyQuote


Subject
Views
Written By
Posted
libmysql.dll 8.0.19 x64 has problem
2380
March 17, 2020 12:57AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.