percona server - mysql on steroids devpoint

Post on 16-Jun-2015

516 Views

Category:

Technology

6 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

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

Евгений СтепченкоEvgeniy.Stepchenko@percona.com

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

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.

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

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.

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

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)

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

6

Что такое InnoDB plugin?

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

★ MySQL 5.1’s pluggable storage engine API

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

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

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

7

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

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

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

8

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

★ Percona Server = MySQL + XtraDB + XtraBackup

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

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

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

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

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

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

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

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

★ Улучшения производительности✦ 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

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

11

12

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

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

12

13

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

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

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

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

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

13

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

15

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

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

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

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

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

Now available in Plugin

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/

17

Adaptive Checkpointing

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

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

18

Adaptive Checkpointing

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

18

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

19

Undo Slots

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

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

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

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

19Warning: This is binary format incompatible!

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!

21

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

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

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

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

21Warning: This is binary format incompatible!

22

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

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

22 Warning: This is binary format incompatible!

Расширения 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

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

24

Содержимое 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

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.

27

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

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

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

27

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

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

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

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

28

29

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

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

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

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

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

29

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

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

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

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

30

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

top related