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