mysql/innodb изнутри: узкие места / Александр Крижановский...
TRANSCRIPT
MySQL/InnoDB :
( )
InnoDB MySQL (5.5, 5.6), Percona Server, MariaDB
MySQL 5.6.11 .. 5.6 (5.6.2, 5.6.4, ...)
Galera
:
buffer pool
kernel mutex
Buffer Pool
MySQL, Percona Server, MariaDB 16KB
LRU
(background) ( )
flush_list ( redo log)
LRU_list , ( buffer pool)
Buffer Pool
MySQL 5.1, 5.5 (MariaDB 5.5, Percona Server 5.5)flush_list master_thread ( )
LRU_list
MySQL 5.6 (MariaDB 10.0, Percona Server 5.6)flush_list master_thread (checkpoint), page_cleaner
LRU_list page_cleaner
LRU (Least Recently Used)
,
( )
=>
CAR/CART
Clock with Adaptive Replacement (CAR)
CAR with Temporal filtering (CART)
Kernel Mutex MySQL 5.1 5.5
(Percona Server 5.5, MariaDB 5.5)
Lockingrecord lock: , /, , , ...
table lock: , / , ...
Transaction commit/rollback ( , Bug# 54982)
MVCC views
read view ( , Bug# 49169)
lock_sys->mutex trx_sys->mutex MySQL 5.6
(Percona Server 5.6, MariaDB 10.0)
Locking: , lock_sys->mutex
Transaction commit/rollback & MVCC views:RO MVCC snapshot
2 : trx_sys->rw_trx_list trx_sys->ro_trx_list
read view ( )
trx_sys->mutex
Galera (Database State Machine)
Database State Machine:
rollback kernel_mutex
Galera:
3 primary key
4 rollback'
Record Table Locks
Table Record
N M
- : (lock_rec_hash(space, page_no)) record lock' (record lock' , => )
tablespace (innodb_file_per_table)
: MySQL 5.6
Per-database concurrencyslave-parallel-workers slave ( , )
GTID (Global Transaction Identifiers)tuple : GNO = 1,2,3,..
Google GTID MySQL 5.0 5.1
: Galera
wsrep_slave_threads slave
apply_cb() , : (local ordering)
global seqno
primary keys
wsrep_apply_cb() wsrep_apply_rbr() ev->apply_event()
global transaction ID async replication
slave_sql , , worker'
Worker' Galera writeset Galera Replicator'
!
++