Percona server - MySQL on Steroids Devpoint

31
1 Percona Server – MySQL на стероидах Евгений Степченко [email protected]

Transcript of Percona server - MySQL on Steroids Devpoint

Page 1: Percona server - MySQL on Steroids Devpoint

1

Percona Server – MySQL на стероидах

Евгений Степченко[email protected]

Page 2: Percona server - MySQL on Steroids Devpoint

2

История InnoDB

★ 1994 – начало разработки★ 1999 – рабочая версия InnoDB★ 2001 – Первая alpha интегрированная в

MySQL ★ ...★ 2005 - MySQL 5.0★ ...★ 2008 - Анонсирован InnoDB Plugin ★ 2010 - Анонсирован InnoDB Plugin 1.1

(включен в MySQL 5.5)2

Длинные периоды между релизами 5.0 и 5.1

Page 3: Percona server - MySQL on Steroids Devpoint

3

Ограничения InnoDB (в MySQL 5.0)Slow Crash Recovery Process Not enough diagnostic

information, particularly around threads that write data/sync

Only one buffer pool. No QoS of mapping tables to buffer pool or pinning indexes/content to prevent eviction.

Poor Multi CPU Scalability Broken group commit support No way to see contents of buffer pool.

No way to limit the memory resident data dictionary size.

No features for warming big buffer pools on server start.

The adaptive hash does not suit all workloads.

Not able to take advantage of a more powerful IO system, that can sustain multiple concurrent threads.

No real ability to configure tablespaces - just two limited options.

Page flushing is not aggressive enough, early enough leading up to checkpoints.

Insert buffer shows weakness -can be up to 1/2 the buffer pool size - and doesn’t make active attempts to be more aggressive at contracting when reaching limit.

IO read ahead assumptions have no configuration options / ability to disable.

Limited number of undo segments limits concurrent transactions to 1024.

= доступен патч в той или иной форме

Page 4: Percona server - MySQL on Steroids Devpoint

4

InnoDB Limitations (as at 5.0)Can’t move tables between servers.

Slow statistics not available in slow query log.

Replication is not transactional.

No way to force checkpoint Can’t cluster on an index other than Primary key.

Opening tables is serialized by LOCK_Open mutex.

No way to freeze checkpoint/flushing activity.

auto_increment scalability is very bad.

No parallel query execution plans.

Adding files to a table space must be done via configuration file not online.

Statistics sampling is done by 10 random dives - limited control over resampling

Index statistics don’t persist on restart and are recalculated each time.

Can’t change page sizes without recompile. Not possible to have multiple page sizes.

Diagnostics - Can’t see a history of deadlocks.

Can’t control page fill factor.

= доступен патч в той или иной форме

Page 5: Percona server - MySQL on Steroids Devpoint

5

InnoDB Limitations (as at 5.0)InnoDB pages have checksums - a very helpful feature to detect silent corruption. The problem is there’s 2 checksums and there may be benefit from being able to change the algorithm.

Further improvements possible to IO. InnoDB’s emulated async IO may not be required. Newer system calls like fallocate/fadvise may lead to improvements.

No memory manager or effective way to limit memory use. This is both true for MySQL and the overhead consumed with InnoDB meta data.

Insert buffer does not assist for delete operations.

Dropping an index recreates the whole table.

Indexes can not be added online

InnoDB per page memory/storage overhead could probably be reduced.

There are no features to compress/pack indexes.

There is no support for additional index algorithms (such as hash or bitmap)

= доступен патч в той или иной форме.

Page 6: Percona server - MySQL on Steroids Devpoint

6

Что такое InnoDB plugin?

★ До недавнего времени изменения версий InnoDB были связаны с релизами MySQL.

★ MySQL 5.1’s pluggable storage engine API

✦ Разработчики получили свободу для реализации изменений независимо от MySQL.

★ Важно: по умолчанию в MySQL 5.1 используется не InnoDB plugin

✦ Но плагин включен в поставку и объявлен GA6

Page 7: Percona server - MySQL on Steroids Devpoint

7

Преимущества InnoDB plugin

★ Новые возможности✦ CPU scalability, fast index creation, buffer pool

tablescan resistance, fast crash recovery, ...★ Главное направление развития InnoDB.

Page 8: Percona server - MySQL on Steroids Devpoint

8

Зачем я всё это рассказывал?

★ Percona Server = MySQL + XtraDB + XtraBackup

★ XtraDB основан на InnoDB plugin✦ Наследует все его функции

★ «Основан» не означает, что было сделано одно ответвление в прошлом

✦ Percona постоянно переносит все свои расширения на новые версии InnoDB plugin

✦ По умолчанию XtraDB не изменяет формат хранения данных. Вы можете переключаться между XtraDB и InnoDB по нескольку раз в день

★ Percona Server и XtraDB выпускаются под лицензией GPL8

Page 9: Percona server - MySQL on Steroids Devpoint

9

Release Model

★ Частые релизы. Постепенные изменения в функциональности / исправления

★ Перенос на новые версии MySQL✦ Например:

Percona-Server-server-51-5.1.50-rel11.4.111.rhel5.x86_64.rpm

• 51 – базовая версия MySQL• 5.1.50 – релиз MySQL, на котором основан данный релиз

Percona Server• 11.4.111 – версия и номер сборки XtraDB

★ Новые релизы примерно каждые 1-2 месяца

9

Page 10: Percona server - MySQL on Steroids Devpoint

Итак, что же изменилось?

Большинство вносимых изменений делятся на две категории

★ Улучшения производительности✦ Improved Buffer Pool Scalability✦ Faster Crash Recovery✦ Separate purge thread✦ Insert buffer controls✦ Data dictionary memory consumption controls✦ Improved IO Path + adaptive checkpointing✦ Faster page checksums*✦ Support for different page sizes*✦ Improved Rollback Segment Scalability*✦ Increased number of undo slots*

★ Улучшения эксплуатационных свойств – диагностика, настройка

✦ Show contents of the buffer pool✦ Import / export of innodb_file_per_table

tables✦ Import / export of buffer pool contents✦ Transactional Replication✦ Better handling of corrupted tables

1010

* - изменения в формате данных, несовместимо с InnoDB plugin

Page 11: Percona server - MySQL on Steroids Devpoint

УЛУЧШЕНИЯ ПРОИЗВОДИТЕЛЬНОСТИ

11

Page 12: Percona server - MySQL on Steroids Devpoint

12

Некоторые улучшения бесплатны

★Улучшения InnoDB plugin✦ Fast Index Creation✦ IO scalability✦ CPU Scalability

12

Page 13: Percona server - MySQL on Steroids Devpoint

13

Улучшенная масштабируемость и производительность

★ Дополнительно к тому, что уже доступно в плагине:

✦ Разделение buffer pool mutex:• Flush list mutex• LRU mutex• Free mutex• hash mutex

✦ Improved IO path• Возможность управлять различными параметрами

подсистемы ввода/вывода– Количество фоновых потоков– Поведение read ahead– …

13

Page 14: Percona server - MySQL on Steroids Devpoint

14

Управление Insert Buffer

★ InnoDB✦ insert buffer - замечательная функция InnoDB

• Для не уникальных индексов операция вставки может ускоряться в 15 раз!

✦ Проблема в том, что при заполнении буфера, он становится бесполезным

✦ Нет возможности управлять максимальным размером★ XtraDB

✦ --innodb_ibuf_max_size – в байтах✦ --innodb_ibuf_accel_rate – по умолчанию 100%. Позволяет

управлять процессом слияния буфера в index tree✦ Немного подробностей –

http://www.mysqlperformanceblog.com/2009/01/13/some-little-known-facts-about-innodb-insert-buffer/

14

Page 15: Percona server - MySQL on Steroids Devpoint

15

Быстрое восстановление

★ InnoDB✦ Однопоточное✦ Зависит от размера --innodb_log_file_size

• Не линейно - 256M может быть намного хуже 128M, а значения > 512M означают «возьмите отгул».

★ XtraDB✦ По нашим тестам, ускорение до 10 раз✦ Должно быть безопасно, но по умолчанию не

включено✦ Включается опцией --innodb_fast_recovery=1

Now available in Plugin

Page 16: Percona server - MySQL on Steroids Devpoint

16

Adaptive Checkpointing

★ Аналогично опции InnoDB plugin, но с двумя новыми алгоритмами:

✦ innodb_adaptive_checkpoint = 1 - “Reflex” ✦ innodb_adaptive_checkpoint = 2 - “Estimate”

★ Сравнение этих алгоритмов в нашем блоге:✦ http://www.mysqlperformanceblog.com/2009/09/15/

which-adaptive-should-we-use/

16http://www.mysqlperformanceblog.com/2009/12/04/effect-of-adaptive_flushing/

Page 17: Percona server - MySQL on Steroids Devpoint

17

Adaptive Checkpointing

★ Картинка для наглядности

17 Source: http://www.mysqlperformanceblog.com/2008/11/13/adaptive-checkpointing/

Page 18: Percona server - MySQL on Steroids Devpoint

18

Adaptive Checkpointing

★ Ещё одна картинка

18

Source: http://www.mysqlperformanceblog.com/2009/09/15/which-adaptive-should-we-use/

Page 19: Percona server - MySQL on Steroids Devpoint

19

Undo Slots

★ InnoDB✦ Количество undo slots ограничено 1024.✦ Это означает, что количество открытых

транзакций не может быть больше 1023✦ Некоторые запросы требуют 2 слота.

★ XtraDB✦ Используя опцию --innodb_extra_undoslots=1

можно расширить количество undo slots до 4072

19Warning: This is binary format incompatible!

Page 20: Percona server - MySQL on Steroids Devpoint

20

Rollback Segments

★ В XtraDB можно использовать несколько Rollback Segments

✦ Каждый из них содержит undo slots★ Опция --innodb-extra-rsegments=N★ Дополнительный эффект – уменьшение

взаимных блокировок на rollback segment

20

http://www.percona.com/docs/wiki/percona-xtradb:patch:innodb_extra_rseghttp://www.mysqlperformanceblog.com/2009/10/14/tuning-for-heavy-writing-workloads/

Warning: This is binary format incompatible!

Page 21: Percona server - MySQL on Steroids Devpoint

21

Быстрые контрольные суммы

★ InnoDB✦ Алгоритм расчёта контрольной суммы

медленнее, чем мог бы быть★ XtraDB

✦ Есть опция для использования нового, быстрого алгоритма расчёта контрольной суммы

21Warning: This is binary format incompatible!

Page 22: Percona server - MySQL on Steroids Devpoint

22

Изменение размера страницы

★ XtraDB поддерживает разные размеры страниц - 4K, 8K, 16K.

22 Warning: This is binary format incompatible!

Page 23: Percona server - MySQL on Steroids Devpoint

Расширения Query Cache

★ query_cache_with_comments✦ По умолчанию это разные запросы:

• /* first query */ select name from users where users.name like 'Bob%';

• /* retry search */ select name from users where users.name like 'Bob%';

✦ Если query_cache_with_comments = ON, сервер будет считать запросы идентичными

★ query_cache_totally_disable✦ Позволяет полностью отключить кэш при старте

сервера --query_cache_type=OFF★ http://www.mysqlperformanceblog.com/2010/09/10/cache-miss-storm/

23

Page 24: Percona server - MySQL on Steroids Devpoint

УЛУЧШЕНИЯ ЭКСПЛУАТАЦИОННЫХ СВОЙСТВ

24

Page 25: Percona server - MySQL on Steroids Devpoint

Содержимое Buffer Pool

Позволяет оценить как наши таблицы помещаются в buffer pool

1. mysql> SELECT d.*,round(100*cnt*16384/(data_length+index_length),2) fit FROM (SELECT schema_name,table_name,count(*) cnt,sum(dirty),sum(hashed)  FROM INNODB_BUFFER_POOL_PAGES_INDEX GROUP BY schema_name,table_name ORDER BY cnt DESC LIMIT 20) d JOIN TABLES ON (TABLES.table_schema=d.schema_name AND TABLES.table_name=d.table_name);

2. +-------------+---------------------+---------+------------+-------------+--------+

3. | schema_name | table_name          | cnt     | sum(dirty) | sum(hashed) | fit    |

4. +-------------+---------------------+---------+------------+-------------+--------+

5. | db          | table1              | 1699133 |      13296 |      385841 |  87.49 |

6. | db          | table2              | 1173272 |      17399 |       11099 |  98.42 |

7. | db          | table3              |  916641 |       7849 |       15316 |  94.77 |

8. | db          | table4              |   86999 |       1555 |       75554 |  87.42 |

9. | db          | table5              |   32701 |       7997 |       30082 |  91.61 |

10. | db          | table6              |   31990 |       4495 |       25681 | 102.97 |

11. | db          | table7              |       1 |          0 |           0 | 100.00 |

12. +-------------+---------------------+---------+------------+-------------+--------+

13. 7 rows IN SET (26.45 sec)

25

Page 26: Percona server - MySQL on Steroids Devpoint

26

Сохранение Buffer Pool

★ Выгрузить содержимое BP в файл ib_lru_dump можно командой:

✦ SELECT * FROM information_schema.XTRADB_ADMIN_COMMAND /*!XTRA_LRU_DUMP*/;

★ Восстановить ib_lru_dump:✦ SELECT * FROM information_schema.XTRADB_ADMIN_COMMAND /*!XTRA_LRU_RESTORE*/;

26

Note: Not the actual contents - it takes 8 bytes to remember the address of a 16K page.

Page 27: Percona server - MySQL on Steroids Devpoint

27

Сохранение Buffer Pool

★ Подробности:✦ http://www.mysqlperformanceblog.com/2010/01/20/

xtradb-feature-save-restore-buffer-pool/

27

Page 28: Percona server - MySQL on Steroids Devpoint

Сохранение BP в Shared Memory

★ Сохраняет BP в разделяемой памяти между перезагрузками сервера

✦ Опция innodb_buffer_pool_shm_key✦ Позволяет избежать долгого процесса

сохранения/загрузки BP на диск

28

Page 29: Percona server - MySQL on Steroids Devpoint

29

Импорт/Экспорт таблиц

★ InnoDB✦ Даже при использовании --innodb-file-per-table вы не можете сделать резервную копию отдельной таблицы

★ XtraDB✦ C новой опцией, --innodb_expand_import=1, это

больше не проблема

★ Важно: Импорт и экспорт по прежнему надо делать с помощью XtraBackup

29

Page 30: Percona server - MySQL on Steroids Devpoint

Улучшенная диагностика

★ SHOW ENGINE INNODB STATUS ✦ Показывает намного больше информации✦ Улучшено форматирование при отображении

★ Статистика по таблицам/индексам★ Микросекунды в slow log★ Распределение времени выполнения

запросов✦ SELECT * from INFORMATION_SCHEMA.QUERY_RESPONSE_TIME

30

Page 31: Percona server - MySQL on Steroids Devpoint

31

The End

Questions?

★ Percona Server http://www.percona.com/software/percona-server/

★ XtraBackup http://www.percona.com/software/percona-xtrabackup/

★ Документация http://www.percona.com/software/documentation/

★ MySQL Performance Blog http://www.mysqlperformanceblog.com/31