MySQL/InnoDB изнутри: узкие места / Александр Крижановский...

download MySQL/InnoDB изнутри: узкие места / Александр Крижановский (NatSys Lab)

If you can't read please download the document

Transcript of MySQL/InnoDB изнутри: узкие места / Александр Крижановский...

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'

!

[email protected]

++