MySQL Optimization – Slow Database with Concurrent Queries

MySQLoptimization

I'm a bit of a newbie when it comes to dba work so please take it easy!

I have gone through countless threads trying to improve the performance of my database, looking for someone who could give me some pointers on changes I may need to do for my variables that may squeeze more performance.
Or if I have misconfigured anything.

Here are the details
Server specs: E3 1270 V6 w/32gb Ram
OS: Windows Server 2016
Mysql Version: 8.0.19 – MySQL Community Server – GPL

MYSQL Config
https://ybin.me/p/b99f994ad62c27ad#zvwS1+XGP6ZIZtKYdiMOySg+aYR85Qp3ciTvFr6q4mE=

Show Global Status (during high usage):

https://ybin.me/p/b74fae252e807749#F9+88tWsVo/hqHjKlnlnG1gEUwj7vlonLlYrUxXnThg=

SHOW ENGINE INNODB STATUS (During High Usage)

InnoDB      
=====================================
2020-05-17 16:57:16 0xa6c INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 7 seconds
-----------------
BACKGROUND THREAD
-----------------
srv_master_thread loops: 103908 srv_active, 0 srv_shutdown, 300397 srv_idle
srv_master_thread log flush and writes: 0
----------
SEMAPHORES
----------
OS WAIT ARRAY INFO: reservation count 42855
OS WAIT ARRAY INFO: signal count 37923
RW-shared spins 3053, rounds 3116, OS waits 59
RW-excl spins 6909, rounds 59455, OS waits 1320
RW-sx spins 99, rounds 1306, OS waits 25
Spin rounds per wait: 1.02 RW-shared, 8.61 RW-excl, 13.19 RW-sx
------------------------
LATEST DETECTED DEADLOCK
------------------------
2020-05-17 13:52:00 0x2904
*** (1) TRANSACTION:
TRANSACTION 12175899, ACTIVE 0 sec starting index read
mysql tables in use 3, locked 3
LOCK WAIT 4 lock struct(s), heap size 1136, 3 row lock(s)
MySQL thread id 3340, OS thread handle 3660, query id 2398670 localhost 127.0.0.1 root updating
UPDATE user_inventory SET count = 22 WHERE identifier = 'steam:11000013f8eef2a' AND item = 'bandage'

*** (1) HOLDS THE LOCK(S):
RECORD LOCKS space id 584 page no 84 n bits 336 index PRIMARY of table `essentialmode`.`user_inventory` trx id 12175899 lock_mode X locks rec but not gap
Record lock, heap no 69 PHYSICAL RECORD: n_fields 6; compact format; info bits 0
 0: len 4; hex 8039a49f; asc  9  ;;
 1: len 6; hex 000000b9849a; asc       ;;
 2: len 7; hex 02000001ad0151; asc       Q;;
 3: len 21; hex 737465616d3a313130303030313366386565663261; asc steam:11000013f8eef2a;;
 4: len 7; hex 62616e64616765; asc bandage;;
 5: len 4; hex 8000002b; asc    +;;


*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 584 page no 2445 n bits 792 index item of table `essentialmode`.`user_inventory` trx id 12175899 lock_mode X waiting
Record lock, heap no 561 PHYSICAL RECORD: n_fields 2; compact format; info bits 0
 0: len 7; hex 62616e64616765; asc bandage;;
 1: len 4; hex 800002e8; asc     ;;


*** (2) TRANSACTION:
TRANSACTION 12175886, ACTIVE 0 sec fetching rows
mysql tables in use 3, locked 3
LOCK WAIT 60 lock struct(s), heap size 8400, 2334 row lock(s)
MySQL thread id 3336, OS thread handle 10296, query id 2398648 localhost 127.0.0.1 root updating
UPDATE user_inventory SET count = 4 WHERE identifier = 'steam:11000010e1c050e' AND item = 'bandage'

*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 584 page no 2445 n bits 792 index item of table `essentialmode`.`user_inventory` trx id 12175886 lock_mode X
Record lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 0
 0: len 8; hex 73757072656d756d; asc supremum;;

Record lock, heap no 561 PHYSICAL RECORD: n_fields 2; compact format; info bits 0
 0: len 7; hex 62616e64616765; asc bandage;;
 1: len 4; hex 800002e8; asc     ;;


*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 584 page no 84 n bits 336 index PRIMARY of table `essentialmode`.`user_inventory` trx id 12175886 lock_mode X locks rec but not gap waiting
Record lock, heap no 69 PHYSICAL RECORD: n_fields 6; compact format; info bits 0
 0: len 4; hex 8039a49f; asc  9  ;;
 1: len 6; hex 000000b9849a; asc       ;;
 2: len 7; hex 02000001ad0151; asc       Q;;
 3: len 21; hex 737465616d3a313130303030313366386565663261; asc steam:11000013f8eef2a;;
 4: len 7; hex 62616e64616765; asc bandage;;
 5: len 4; hex 8000002b; asc    +;;

*** WE ROLL BACK TRANSACTION (1)
------------
TRANSACTIONS
------------
Trx id counter 12207888
Purge done for trx's n:o < 12207888 undo n:o < 0 state: running but idle
History list length 19
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 283609840283040, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 283609840282192, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 283609840281344, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
--------
FILE I/O
--------
I/O thread 0 state: wait Windows aio (insert buffer thread)
I/O thread 1 state: wait Windows aio (log thread)
I/O thread 2 state: wait Windows aio (read thread)
I/O thread 3 state: wait Windows aio (read thread)
I/O thread 4 state: wait Windows aio (read thread)
I/O thread 5 state: wait Windows aio (read thread)
I/O thread 6 state: wait Windows aio (read thread)
I/O thread 7 state: wait Windows aio (read thread)
I/O thread 8 state: wait Windows aio (read thread)
I/O thread 9 state: wait Windows aio (read thread)
I/O thread 10 state: wait Windows aio (read thread)
I/O thread 11 state: wait Windows aio (read thread)
I/O thread 12 state: wait Windows aio (read thread)
I/O thread 13 state: wait Windows aio (read thread)
I/O thread 14 state: wait Windows aio (read thread)
I/O thread 15 state: wait Windows aio (read thread)
I/O thread 16 state: wait Windows aio (read thread)
I/O thread 17 state: wait Windows aio (read thread)
I/O thread 18 state: wait Windows aio (read thread)
I/O thread 19 state: wait Windows aio (read thread)
I/O thread 20 state: wait Windows aio (read thread)
I/O thread 21 state: wait Windows aio (read thread)
I/O thread 22 state: wait Windows aio (read thread)
I/O thread 23 state: wait Windows aio (read thread)
I/O thread 24 state: wait Windows aio (read thread)
I/O thread 25 state: wait Windows aio (read thread)
I/O thread 26 state: wait Windows aio (read thread)
I/O thread 27 state: wait Windows aio (read thread)
I/O thread 28 state: wait Windows aio (read thread)
I/O thread 29 state: wait Windows aio (read thread)
I/O thread 30 state: wait Windows aio (read thread)
I/O thread 31 state: wait Windows aio (read thread)
I/O thread 32 state: wait Windows aio (read thread)
I/O thread 33 state: wait Windows aio (read thread)
I/O thread 34 state: wait Windows aio (read thread)
I/O thread 35 state: wait Windows aio (read thread)
I/O thread 36 state: wait Windows aio (read thread)
I/O thread 37 state: wait Windows aio (read thread)
I/O thread 38 state: wait Windows aio (read thread)
I/O thread 39 state: wait Windows aio (read thread)
I/O thread 40 state: wait Windows aio (read thread)
I/O thread 41 state: wait Windows aio (read thread)
I/O thread 42 state: wait Windows aio (read thread)
I/O thread 43 state: wait Windows aio (read thread)
I/O thread 44 state: wait Windows aio (read thread)
I/O thread 45 state: wait Windows aio (read thread)
I/O thread 46 state: wait Windows aio (read thread)
I/O thread 47 state: wait Windows aio (read thread)
I/O thread 48 state: wait Windows aio (read thread)
I/O thread 49 state: wait Windows aio (read thread)
I/O thread 50 state: wait Windows aio (read thread)
I/O thread 51 state: wait Windows aio (read thread)
I/O thread 52 state: wait Windows aio (read thread)
I/O thread 53 state: wait Windows aio (read thread)
I/O thread 54 state: wait Windows aio (read thread)
I/O thread 55 state: wait Windows aio (read thread)
I/O thread 56 state: wait Windows aio (read thread)
I/O thread 57 state: wait Windows aio (read thread)
I/O thread 58 state: wait Windows aio (read thread)
I/O thread 59 state: wait Windows aio (read thread)
I/O thread 60 state: wait Windows aio (read thread)
I/O thread 61 state: wait Windows aio (read thread)
I/O thread 62 state: wait Windows aio (read thread)
I/O thread 63 state: wait Windows aio (read thread)
I/O thread 64 state: wait Windows aio (read thread)
I/O thread 65 state: wait Windows aio (read thread)
I/O thread 66 state: wait Windows aio (write thread)
I/O thread 67 state: wait Windows aio (write thread)
I/O thread 68 state: wait Windows aio (write thread)
I/O thread 69 state: wait Windows aio (write thread)
I/O thread 70 state: wait Windows aio (write thread)
I/O thread 71 state: wait Windows aio (write thread)
I/O thread 72 state: wait Windows aio (write thread)
I/O thread 73 state: wait Windows aio (write thread)
I/O thread 74 state: wait Windows aio (write thread)
I/O thread 75 state: wait Windows aio (write thread)
I/O thread 76 state: wait Windows aio (write thread)
I/O thread 77 state: wait Windows aio (write thread)
I/O thread 78 state: wait Windows aio (write thread)
I/O thread 79 state: wait Windows aio (write thread)
I/O thread 80 state: wait Windows aio (write thread)
I/O thread 81 state: wait Windows aio (write thread)
I/O thread 82 state: wait Windows aio (write thread)
I/O thread 83 state: wait Windows aio (write thread)
I/O thread 84 state: wait Windows aio (write thread)
I/O thread 85 state: wait Windows aio (write thread)
I/O thread 86 state: wait Windows aio (write thread)
I/O thread 87 state: wait Windows aio (write thread)
I/O thread 88 state: wait Windows aio (write thread)
I/O thread 89 state: wait Windows aio (write thread)
I/O thread 90 state: wait Windows aio (write thread)
I/O thread 91 state: wait Windows aio (write thread)
I/O thread 92 state: wait Windows aio (write thread)
I/O thread 93 state: wait Windows aio (write thread)
I/O thread 94 state: wait Windows aio (write thread)
I/O thread 95 state: wait Windows aio (write thread)
I/O thread 96 state: wait Windows aio (write thread)
I/O thread 97 state: wait Windows aio (write thread)
I/O thread 98 state: wait Windows aio (write thread)
I/O thread 99 state: wait Windows aio (write thread)
I/O thread 100 state: wait Windows aio (write thread)
I/O thread 101 state: wait Windows aio (write thread)
I/O thread 102 state: wait Windows aio (write thread)
I/O thread 103 state: wait Windows aio (write thread)
I/O thread 104 state: wait Windows aio (write thread)
I/O thread 105 state: wait Windows aio (write thread)
I/O thread 106 state: wait Windows aio (write thread)
I/O thread 107 state: wait Windows aio (write thread)
I/O thread 108 state: wait Windows aio (write thread)
I/O thread 109 state: wait Windows aio (write thread)
I/O thread 110 state: wait Windows aio (write thread)
I/O thread 111 state: wait Windows aio (write thread)
I/O thread 112 state: wait Windows aio (write thread)
I/O thread 113 state: wait Windows aio (write thread)
I/O thread 114 state: wait Windows aio (write thread)
I/O thread 115 state: wait Windows aio (write thread)
I/O thread 116 state: wait Windows aio (write thread)
I/O thread 117 state: wait Windows aio (write thread)
I/O thread 118 state: wait Windows aio (write thread)
I/O thread 119 state: wait Windows aio (write thread)
I/O thread 120 state: wait Windows aio (write thread)
I/O thread 121 state: wait Windows aio (write thread)
I/O thread 122 state: wait Windows aio (write thread)
I/O thread 123 state: wait Windows aio (write thread)
I/O thread 124 state: wait Windows aio (write thread)
I/O thread 125 state: wait Windows aio (write thread)
I/O thread 126 state: wait Windows aio (write thread)
I/O thread 127 state: wait Windows aio (write thread)
I/O thread 128 state: wait Windows aio (write thread)
I/O thread 129 state: wait Windows aio (write thread)
Pending normal aio reads: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] , aio writes: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] ,
 ibuf aio reads:, log i/o's:, sync i/o's:
Pending flushes (fsync) log: 0; buffer pool: 0
25639 OS file reads, 5252794 OS file writes, 2142145 OS fsyncs
0.00 reads/s, 0 avg bytes/read, 0.00 writes/s, 0.00 fsyncs/s
-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 30, seg size 32, 78 merges
merged operations:
 insert 89, delete mark 3, delete 0
discarded operations:
 insert 0, delete mark 0, delete 0
Hash table size 4425293, node heap has 577 buffer(s)
Hash table size 4425293, node heap has 7 buffer(s)
Hash table size 4425293, node heap has 3 buffer(s)
Hash table size 4425293, node heap has 42 buffer(s)
Hash table size 4425293, node heap has 25 buffer(s)
Hash table size 4425293, node heap has 8 buffer(s)
Hash table size 4425293, node heap has 117 buffer(s)
Hash table size 4425293, node heap has 268 buffer(s)
63.71 hash searches/s, 4.29 non-hash searches/s
---
LOG
---
Log sequence number          8204611911
Log buffer assigned up to    8204611911
Log buffer completed up to   8204611911
Log written up to            8204611911
Log flushed up to            8204611911
Added dirty pages up to      8204611911
Pages flushed up to          8204611911
Last checkpoint at           8204611911
2113740 log i/o's done, 0.00 log i/o's/second
----------------------
BUFFER POOL AND MEMORY
----------------------
Total large memory allocated 17582522368
Dictionary memory allocated 1618261
Buffer pool size   1048576
Free buffers       1010227
Database pages     37302
Old database pages 13779
Modified db pages  0
Pending reads      0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 1961, not young 12509
0.00 youngs/s, 0.00 non-youngs/s
Pages read 25245, created 12063, written 2341874
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 37302, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
----------------------
INDIVIDUAL BUFFER POOL INFO
----------------------
---BUFFER POOL 0
Buffer pool size   131072
Free buffers       126195
Database pages     4738
Old database pages 1766
Modified db pages  0
Pending reads      0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 47, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 3177, created 1561, written 390400
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 4738, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
---BUFFER POOL 1
Buffer pool size   131072
Free buffers       126202
Database pages     4747
Old database pages 1732
Modified db pages  0
Pending reads      0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 57, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 3144, created 1603, written 377393
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 4747, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
---BUFFER POOL 2
Buffer pool size   131072
Free buffers       126359
Database pages     4584
Old database pages 1682
Modified db pages  0
Pending reads      0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 1596, not young 12509
0.00 youngs/s, 0.00 non-youngs/s
Pages read 3159, created 1431, written 286695
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
No buffer pool page gets since the last printout
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 4584, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
---BUFFER POOL 3
Buffer pool size   131072
Free buffers       126376
Database pages     4563
Old database pages 1679
Modified db pages  0
Pending reads      0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 23, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 3060, created 1503, written 217282
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
No buffer pool page gets since the last printout
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 4563, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
---BUFFER POOL 4
Buffer pool size   131072
Free buffers       126427
Database pages     4515
Old database pages 1683
Modified db pages  0
Pending reads      0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 39, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 3113, created 1402, written 296757
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 4515, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
---BUFFER POOL 5
Buffer pool size   131072
Free buffers       126346
Database pages     4604
Old database pages 1681
Modified db pages  0
Pending reads      0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 48, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 3120, created 1484, written 220370
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 4604, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
---BUFFER POOL 6
Buffer pool size   131072
Free buffers       126053
Database pages     4883
Old database pages 1815
Modified db pages  0
Pending reads      0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 104, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 3276, created 1607, written 259821
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 4883, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
---BUFFER POOL 7
Buffer pool size   131072
Free buffers       126269
Database pages     4668
Old database pages 1741
Modified db pages  0
Pending reads      0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 47, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 3196, created 1472, written 293156
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 4668, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
--------------
ROW OPERATIONS
--------------
0 queries inside InnoDB, 0 queries in queue
0 read views open inside InnoDB
Process ID=9652, Main thread ID=00000000000028B4 , state=sleeping
Number of rows inserted 425605, updated 1126794, deleted 24758, read 3734292042
0.00 inserts/s, 0.00 updates/s, 0.00 deletes/s, 0.00 reads/s
Number of system rows inserted 1841, updated 1056, deleted 1656, read 1362568
0.00 inserts/s, 0.00 updates/s, 0.00 deletes/s, 69.28 reads/s
----------------------------
END OF INNODB MONITOR OUTPUT
============================

MYSQL Tuner Tips
https://i.gyazo.com/107f94f2e69fafe58d6f2125ff3c9ccc.png

I would highly appreciate any input on how we can make the database happier!
If I'm missing any information, let me know happy to provide any extra info!

Best Answer

innodb_log_file_size seems rather high. Do you really write 10GB+ to your database in your daily peak hour?

innodb_open_files should be left at default (autosize). This is what is overriding your table_open_cache.

Do you really have achievable 20,000 IOPs from your storage? It takes a well tuned storage stack to achieve that even on NVMe SSDs.

innodb_checksum_algorithm should only be disabled if you use a filesystem that does checksumming for you. Given that you are on Windows, you are almost certain not using such a file system so you shouldn't be disabling this.

You have various things set in there that you probably shouldn't be touching unless you have an overwhelmingly good reason to. Unless you are doing really advanced tuning to work around a very specific bottleneck, the only variable you should be touching is innodb_buffer_pool_size. Everything else should be left at default settings. Use mysql tuner at your peril - it produces terrible advice at least as often as anything useful. For example you sabotaged yourself by changing innodb_open_files.

The biggest improvement you can make to your performance is fixing your joins being carried out unindexed. Find the queries that are joining unindexed and add the appropriate indexes.