Your SlideShare is downloading. ×
0
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Kopytov
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Kopytov

1,929

Published on

MySQL user group

MySQL user group

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,929
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Percona Server 5.6 Alexey.Kopytov@percona.com August 2, 2013
  • 2. Percona Server? I расширенная версия (не форк!) MySQL I последний релиз MySQL + набор расширений I расширения основаны на запросах от клиентов и консультантов Percona I 30,000 - 60,000 загрузок в месяц с percona.com I скоро в репозиториях Debian (потом Ubuntu) I http://mirror.yandex.ru/mirrors/percona/
  • 3. Percona Server? Фокус разработки: I прозрачность: дополнительная диагностика и счётчики I управляемость: функции, облегчающие администрирование I производительность
  • 4. Percona Server -> MySQL 5.6 Функции Percona Server, реализованные в MySQL 5.6: I InnoDB persistent statistics I поддержка redo log > 4 GB I INFORMATION_SCHEMA.INNODB_SYS_* таблицы I INFORMATION_SCHEMA.BUFFER_POOL I innodb_page_size I InnoDB fast page checksums – innodb_checksum_algorithm в 5.6 I improved InnoDB tablespace import – экспорт таблиц прямо на сервере в 5.6 I LRU dump/restore – innodb_buffer_pool_load_at_startup в 5.6 I innodb_dict_size_limit – table_definition_cache в 5.6
  • 5. Percona Server 5.6 I Релиз: сентябрь (2013) I Расширения: userstat, расширения slow query log, corrupt_table_action, kill idle, trx, fake changes, expand_fast_index_creation, mysqldump --innodb-optimize-keys, innodb_log_block_size, innodb_flush_method, trx descriptors, buffer pool mutex split, adaptive hash index mutex split, dynamic row format в MEMORY storage engine, патчи для NUMA архитектуры, enforce storage engine, utility user, поддержка FusionIO atomic writes, временные таблицы в INFORMATION_SCHEMA, query cache strip comments, max_statement_time, scalability metrics plugin, диагностика в SHOW ENGINE INNODB STATUS
  • 6. Percona Server 5.6 I userstat – PERFORMANCE_SCHEMA не является полной заменой
  • 7. Percona Server 5.6 I расширения для slow query log # User@Host: mailboxer[mailboxer] @ [192.168.10.165] # Thread_id: 11167745 Schema: board # Query_time: 1.009400 Lock_time: 0.000190 Rows_sent: 4 R # Bytes_sent: 278 Tmp_tables: 0 Tmp_disk_tables: 0 Tmp_ta # InnoDB_trx_id: 1500 # QC_Hit: No Full_scan: Yes Full_join: No Tmp_table: No # Filesort: No Filesort_on_disk: No Merge_passes: 0 # InnoDB_IO_r_ops: 6415 InnoDB_IO_r_bytes: 105103360 Inn # InnoDB_rec_lock_wait: 0.000000 InnoDB_queue_wait: 0.000 # InnoDB_pages_distinct: 6430 SET timestamp=1346844943; SELECT id,title,production_year FROM title WHERE title = ’Ba
  • 8. Percona Server 5.6 I corrupt_table_action
  • 9. Percona Server 5.6 I kill idle trx BEGIN SELECT * FROM t; SELECT SLEEP(100000000); . . .
  • 10. Percona Server 5.6 Fake changes I быстрый разогрев replication slave “проигрыванием” живой нагрузки I читает страницы для INSERT / UPDATE / DELETE, но не изменяет их
  • 11. Percona Server 5.6 I expand_fast_index_creation
  • 12. Percona Server 5.6 I mysqldump --innodb-optimize-keys
  • 13. Percona Server 5.6 I innodb_log_block_size
  • 14. Percona Server 5.6 I innodb_flush_method
  • 15. Percona Server 5.6 I trx descriptors
  • 16. Percona Server 5.6 Buffer pool mutex split. I MySQL: глобальный мьютекс I Percona Server: I buf_pool_mutex I LRU_list_mutex I flush_list_mutex I page_hash_latch I free_list_mutex I zip_free_mutex I zip_hash_mutex
  • 17. Percona Server 5.6 Adaptive hash index partitioning I innodb_adaptive_hash_index_partitions
  • 18. Percona Server 5.6 I dynamic row format в MEMORY storage engine CREATE TABLE t (a VARCHAR(255)) ENGINE=MEMORY; I MySQL: 255+ байтов на запись I Percona Server: зависит от действительной длины каждой записи I Percona Server: поддерживает BLOB/TEXT
  • 19. Percona Server 5.6 I NUMA патчи
  • 20. Percona Server 5.6 I enforce storage engine mysql> select @@enforce_storage_engine; +--------------------------+ | @@enforce_storage_engine | +--------------------------+ | innodb | +--------------------------+ mysql> create table t(a int) engine=myisam; ERROR 1286 (42000): Unknown storage engine ’MyISAM’
  • 21. Percona Server 5.6 Utility user: I может изменять значения системных переменных I имеет доступ только к тем таблицам, к которым разрешено в my.cnf I может создавать/удалять пользователей (если разрешён доступ к mysql.*)
  • 22. Percona Server 5.6 поддержка FusionIO atomic writes: I поддерживает atomic writes API на FusionIO устройствах I порт из MariaDB I делает InnoDB doublewrite buffer ненужным I повышает производильность на запись до 43%
  • 23. Percona Server 5.6 I временные таблицы в INFORMATION_SCHEMA
  • 24. Percona Server 5.6 I query cache strip comments /* comment 1 */ select * from users where name like ’Bob%’; /* comment 2 */ select * from users where name like ’Bob%’;
  • 25. Percona Server 5.6 I max_statement_time из Twitter MySQL: mysql> SET max_statement_time=1000; mysql> SELECT SLEEP(2); ERROR: Query execution was interrupted, max_statement_time exceeded I модификация в Percona Server: mysql> SET STATEMENT max_statement_time=60000 SELECT * FROM big_table; ERROR: Query execution was interrupted, max_statement_time exceeded
  • 26. Percona Server 5.6 Scalability metrics plugin: I сколько запросов завершилось в интервал времени? I сколько запросов выполняются сейчас? I сумма времени выполнения запросов, включая те, которые ещё выполняются I общее время, когда сервер выполнял хотя бы один запрос I реализовано как audit plugin
  • 27. Percona Server 5.6 I Диагностика в SHOW ENGINE INNODB STATUS: мьютексы, background threads, insert buffer, adaptive hash index, buffer pool, redo log, transactions, . . .
  • 28. Производительность: I SSD часто требуют иного подхода для чтения/записи данных I память (NUMA встречается всё чаще) I процессоры: больше “лошадиных сил”, но нужно уметь ими пользоваться
  • 29. Производительность: /*********************************************************** Runs an idle loop on CPU. The argument gives the desired delay in microseconds on 100 MHz Pentium + Visual C++. */ ... /* Semaphore operations in operating systems are slow: Solaris on a 1993 Sparc takes 3 microseconds (us) for a lock-unlock pair and Windows NT on a 1995 Pentium takes 20 microseconds for a lock-unlock pair. */
  • 30. Инструменты: I PERFORMANCE_SCHEMA в 5.6 +: I SQL интерфейс I нет равных по возможностям инструментов -: I накладные расходы до 30% (Bug #68413) I плохо документирована I иногда требует рестарта сервера I мало информации по мьютексам I сложно использовать и настраивать (вспомогательные утилиты, например http://www.markleith.co.uk/ps_helper/)
  • 31. Инструменты INFORMATION_SCHEMA.INNODB_METRICS в 5.6 +: I дополняет PERFORMANCE_SCHEMA I низкие накладные расходы I не требует рестарта -: I плохо документирована I оригинальный способ конфигурации
  • 32. Инструменты I OProfile +: I callgraph profiling I annotated profiling I сравнительно низкий overhead I доступен на всех системах I широкий спектр hardware events –: I не показывает мьютексы
  • 33. Инструменты I perf +: I похож на OProfile I perf top -: I показывает только системные мьютексы (pthread)
  • 34. Инструменты I Poor Man’s Profiler I http://poormansprofiler.org/ I Percona Toolkit: wget percona.com/get/pt-pmp
  • 35. Инструменты I Poor Man’s Profiler 300 select,os_thread_sleep,srv_LRU_dump_restore_thread,start_th 157 pthread_cond_wait,os_cond_wait,os_event_wait_low,sync_array 147 pthread_cond_wait,os_cond_wait,os_event_wait_low,srv_purge_ 139 select,os_thread_sleep,srv_purge_thread,start_thread,clone 104 pthread_cond_wait,os_cond_wait,os_event_wait_low,sync_array 78 ut_delay,mutex_spin_wait,mutex_enter_func,pfs_mutex_enter_f +: I доступен всегда и везде I позволяет получить общую картину быстро с минимальными усилиями -: I высокий overhead I низкая точность I нужно знать код, чтобы прочитать
  • 36. Визуализация: I dim_stat I Percona Monitoring Plugins – интеграция Nagios и Cacti
  • 37. NUMA Uniform Memory Accessc vs Non-Uniform Memory Access:
  • 38. NUMA I всегда есть обращения к “чужой” памяти
  • 39. NUMA I память выделяется на текущей ноде по умолчанию
  • 40. NUMA I чередование (interleaving) памяти: # Numactl --interleave all mysqld ... I interleaving на уровне BIOS – плохо!
  • 41. NUMA I файловый кэш тоже мешает: I решение: # sysctl -q -w vm.drop_caches=3
  • 42. NUMA Linux memory overcommit: I память выделяется, только когда к ней обращаются I при инициализации buffer pool нужно сделать memset()
  • 43. NUMA I Подробное описание проблем от Jeremy Cole: http://blog.jcole.us/2010/09/28/mysql-swap-insanity-and-the- numa-architecture/ http://blog.jcole.us/2012/04/16/a-brief-update-on-numa-and- mysql/ Патчи от Twitter в Percona Server 5.5 / 5.6: I опции mysqld_safe: [mysqld_save] numa_interleave=1 flush_caches=1 I опции сервера: [server] innodb_buffer_pool_populate=1
  • 44. Типы нагрузок: I CPU bound: I активные данные в памяти I только чтение I I/O bound: I обычно интенсивная запись
  • 45. CPU-bound I неэффективная работа с памятью и кэшем процессора I плохая масштабируемость I неэффективная реализация примитивов синхронизации I затор на doublewrite buffer для read-only нагрузок в 5.6!
  • 46. jemalloc I масштабируемая реализация malloc() http://www.canonware.com/jemalloc/ I используется по умолчанию в Firefox, FreeBSD, NetBSD
  • 47. jemalloc I поставляется вместе с Percona Server (.tar.gz) I опция malloc-lib: [mysqld_save] malloc-lib=/usr/local/mysql/lib/libjemalloc.so
  • 48. kernel mutex и trx sys->mutex I read views:
  • 49. kernel mutex и trx sys->mutex I read views:
  • 50. kernel mutex и trx sys->mutex I создание read view:
  • 51. kernel mutex и trx sys->mutex read-only транзакции в 5.6: I SELECT + AUTO_COMMIT=1 или START TRANSACTION READ ONLY I read-only транзакции не добавляются в trx_list I нет проблемы, если trx_list пустой (т.е. если нет других транзакций!)
  • 52. trx descriptors
  • 53. trx descriptors
  • 54. trx descriptors
  • 55. kernel mutex и trx sys->mutex Как узнать? I SHOW ENGINE INNODB STATUS: --Thread 140370743510784 has waited at trx0trx.c line 1184 f Mutex at 0x2b0ccc8 ’&kernel_mutex’, lock var 1 ... I PMP: 234 ... innobase_commit_low,thd=0xad553dc0),innobase_commit. I PERFORMANCE_SCHEMA: = Что делать? I попробовать jemalloc I использовать read-only транзакции, если есть возможность I перейти на Percona Server или MariaDB + XtraDB
  • 56. I/O bound I часто медленнее в 5.6 (часть регрессий исправлена в 5.6.13) I плохая согласованность подсистем InnoDB (user threads, log writing, flushing, purge, . . . ) I несколько buffer pool-ов чаще мешают, чем помогают (Bug #67808) I затор на всевозможных механизмах синхронизации I doublewrite работает неэффективно для страниц < 16K (Bug #69842)
  • 57. Buffer pool mutex split I реализовано в Percona Server много лет назад I всё ещё актуально для 5.6
  • 58. AHI mutex partitioning Adaptive hash index: I строится автоматически для часто обращаемых страниц B-Tree индексов I глобальная структура Как определить AHI mutex contention? I btr_search... в PMP I wait/synch/rwlock/innodb/hash_table_locks в PERFORMANCE_SCHEMA Что делать? I Percona Server: innodb_adaptive_hash_index_partitions=N
  • 59. AHI mutex partitioning
  • 60. index lock I 2 механизма обновления B-Tree индексов: I оптимистический – страница обновляется “по месту” I пессимистический – реорганизация страниц => блокировка всей таблицы! I может читать страницы с диска, пока индекс заблокирован I Как узнать? I PMP: btr_cur_search_to_nth_level() I PERFORMANCE_SCHEMA: &new_index->lock I Что делать? I использовать partitioning
  • 61. log block checksums Клиент: хотим загружать ˜130mil записей очень быстро I LOAD DATA INFILE I несколько потоков I без secondary indexes I много partitions
  • 62. log block checksums Затор на log_sys->mutex: ulint log_block_calc_checksum( const byte* block) /*!< in: log block */ { for (i = 0; i < OS_FILE_LOG_BLOCK_SIZE - LOG_BLOCK_TRL_SIZE; i++ ulint b = (ulint) block[i]; sum &= 0x7FFFFFFFUL; sum += b; sum += b << sh; sh++; if (sh > 24) { sh = 0; } } return(sum); } I замена алгоритма на векторную CRC32 инструкцию процессора => ˜2x speedup
  • 63. log block checksums I Как узнать? I PERFORMANCE_SCHEMA: log_sys->mutex I PMP: 33 log_block_calc_checksum,log_block_store_checksum,log_ Что делать? I дождаться innodb_log_checksum_algorithm в Percona Server 5.6
  • 64. Threadpool I реализация в MySQL 6.0 I libevent I глобальный мьютекс I блокированное соединение оставалось в пуле I реализация в MySQL Enterprise Edition I реализована как plugin I $$ I реализация в MariaDB I независимая реализация I не plugin (но использует инфрастуктуру enterprise plugin) I реализация в Percona I портирована из MariaDB I high priority scheduling I исправления ошибок
  • 65. Threadpool

×