My sql 5.6-new-stable-mmug

  • 676 views
Uploaded on

Доклад Дмитрия Ленева на Moscow MySQL User Group.

Доклад Дмитрия Ленева на Moscow MySQL User Group.

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
676
On Slideshare
0
From Embeds
0
Number of Embeds
3

Actions

Shares
Downloads
6
Comments
0
Likes
1

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. <Insert Picture Here>5.6 новая стабильная ветка MySQL Server.Дмитрий Ленев, Март 2013, Москва
  • 2. MySQL 5.6 ● Текущая версия – 5.6.10 ● Это первая стабильная версия (GA) в 5.6 выпущена в начале февраля 2013 года ● До этого 3 RC версии с сентября 2012 ● Базируется на Milestone Release версии 5.6.6- m9 (август 2012) ● Старые ветки 5.1 и 5.5 по прежнему поддерживаются ● Новая development ветка 5.72 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 3. Основные направления улучшений в MySQL 5.6● Оптимизатор/выполнение запросов● InnoDB● Репликация● Расширение типов и новые операции● Улучшения в безопасности● performance_schema● Memcached API для INNODB 3 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 4. Улучшения в оптимизаторе/выполнении запросов (скорость).● Index Condition Pushdown● Disk Sweep Multi-Range Read● Batched Key Access для соединений (joins)● Оптимизации выполнения подзапросов: – Через материализацию – Через semi-join – Отложенная материализация для подзапросов из FROM/views – Игнорирование клауз подзапроса не влияющих на результат● Улучшение выполнения запросов с ORDER BY (filesort)● Оптимизированный анализ селективности для IN 4 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 5. Index Condition PushdownStorage engine при чтении по индексу проверяет часть условия котораязависит только от полей в индексе, не читая всю строку и не возвращаяуправление SQL-layer.CREATE TABLE person ( personid INTEGER PRIMARY KEY, firstname CHAR(20), lastname CHAR(20), postalcode INTEGER, age INTEGER, KEY k1 (postalcode,age) ) ENGINE=InnoDB;SELECT lastname, firstname FROM person WHERE postalcode BETWEEN 5000 AND 5500 AND age BETWEEN 21AND 22; 5 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 6. Disk Sweep – Multi-Range ReadЧтение строк по индексу, в порядке расположения их на дискепакетная обработка групп чтений по индексу:CREATE TABLE items ( id INTEGER PRIMARY KEY, attr1 CHAR(20), keypart1 INTEGER, keypart2 INTEGER, KEY k1 (keypart1, keypart2) ) ENGINE=InnoDB;SELECT * FROM items WHERE keypart1 BETWEEN 1000 AND 1100 AND keypart2 = 1200;Без MRR получим один промежуток вида 1000 <= keypart1 <= 1100.C MRR получим 100 промежутков для {keypart1, keypart2} – {1000, 1200}, {1001,1200} … {1100, 1200}. 6 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 7. Batched Key Access в соединениях● Для соединений с доступом к одной из табличек по ключу – Накопить строки из первой таблички в буфере – Запросить строки из второй таблички, с ключем, одним запросом, используя DS MRR – Получить строки по одной от storage engine для соединения (с ссылкой на элемент в буфере) 7 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 8. Оптимизации в выполнении подзапросов● Выполнение через материализациюSELECT * FROM t1 WHERE t1.a IN (SELECT t2.b FROM t2 WHERE where_condition);● Выполнение через semi-joinSELECT * FROM nation WHERE n_regionkey IN (SELECT r_regionkey FROM regionWHERE r_name=AFRICA);SELECT nation.* FROM nation SEMI JOIN region ON nation.n_regionkey =region.r_regionkey AND region.r_name=AFRICA;● Отложенная материализация для подзапросов из FROM клаузы/views (лучше для EXPLAIN, может не потребоваться вообще)● Игнорирование клауз подзапроса не влияющих на результат (SELECT * FROM … a IN (SELECT DISTINCT b FROM …) ) 8 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 9. Прочие улучшения в оптимизации/выполнении запросов● Улучшение выполнения запросов с ORDER BY (filesort) (для запросов c ORDER BY non_indexed_column и LIMIT x, и случаев когда x строк помещаются в sort buffer)● Оптимизированный анализ статистики для IN (параметр eq_range_index_dive_limit, определяет будем ли мы делать нырки в индекс или использовать статистику по индексу). 9 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 10. Улучшения в оптимизаторе/выполнении запросов (удобство в использовании)● Optimizer trace (SET optimizer_trace=..., I_S.OPTIMIZER_TRACE)● EXPLAIN для INSERT/UPDATE/DELETEEXPLAIN UPDATE t1 SET c2=12345 WHERE (c1, c2) IN ((3, 1)); id select_type table type possible_keys key key_len ref row Extra 1 SIMPLE t1 range PRIMARY PRIMARY 4 NULL 1 Using where● EXPLAIN в JSON формате (EXPLAIN FORMAT=JSON ...)● Определение стратегии обработки ORDER BY на этапе оптимизации 10 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 11. Новые возможности в InnoDB (1)● Хранимая статистика для таблиц (сохраняется при рестарте, перестраивается ANALYZE TABLE, опции управления качеством).● Поддержка полнотекстового поиска (таблицы I_S.INNODB_FT_*, переменные innodb_ft_*, предикат MATCH (col1, …, colN) AGAINST (expr [search_modifier]) )● Новые таблицы в INFORMATION_SCHEMA (INNODB_METRICS, INNODB_SYS_*, INNODB_BUFFER_*)● Ослаблено ограничение на размер колонки в ключе● Появилось возможность журналирования всех deadlock-ов (--innodb_print_all_deadlocks) 11 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 12. Новые возможности в InnoDB (2)● Online ALTER – все виды add/drop index – add/drop column – add/drop foreign key (без проверки) – изменение nullability, – изменение auto_increment, – переименование столбцов – ... – не поддерживается смена типа● Transportable tablespaces (FLUSH TABLE ... FOR EXPORT)● Поддержка опции DATA DIRECTORY 12 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 13. Производительность и масштабируемость в InnoDB (1)● Оптимизация обработки read-only транзакций (non- locking autocommit SELECTs, START TRANSACTION READ ONLY, до 3х!)● Увеличен максимальный размер REDO журнала (512Gb, --innodb-log-file-size=)● Сохранение/восстановле ние содержимого buffer pool (innodb_buffer_pool_dump/load/*) 13 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 14. Производительность и масштабируемость в InnoDB (2)● Поддержка страниц уменьшенного размера (4K и 8К при 16К по умолчанию, SSD!, --innodb-page-size)● Поддержка UNDO журнала в отдельных tablespace (SSD!, --innodb-undo-directory=)● Поддержка аппаратного вычисления контрольных сумм для страниц (--innodb-checksum-algorithm=) 14 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 15. Производительность и масштабируемость в InnoDB (3)● Kernel mutex разбит на несколько mutexов – Транзакции и MVCC views: trx_sys_t::lock (rw_lock) и trx_t::mutex – Locking : lock_sys_t::mutex и lock_sys_t::wait_mutex● Оптимизация использования блокировок при обращении к buffer pool● Оптимизация использования блокировок во время commit● Очистка кэша InnoDB таблиц (--table_definition_cache, LRU) 15 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 16. Производительность и масштабируемость в InnoDB (4)● Несколько purge ниток (--innodb_purge_threads, <=32)● Отдельная нить для выталкивания страниц из buffer pool (вместо master thread), новый алгоритм выталкивания (DimitriK)● Улучшен механизм управление нитями в InnoDB● Оптимизировано использование кэша процессора (до 50% в OLTP-RO, до 6 раз в RO-S-Ranges) 16 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 17. Производительность и масштабируемость InnoDB по сравнению с MySQL 5.517 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 18. Улучшения в репликации (1)● Group Commit для Binary Log (--binlog-max-flush-queue-time)● Поддержка Global Transaction Identifiers (GTID = source_id:transaction_id, CHANGE MASTER TO ... MASTER_AUTO_POSITION=1, --gtid_mode=on, @@gtid_ ...)● Многопоточный slave (параллелизм для БД, --slave-parallel- workers=N)● Crash-safe slave (автоматическое восстановление репликации после падения, crash safe binary log, файлы состояния, хранение состояния в таблицах)● Поддержка контрольных сумм в binary log (--binlog- checksum=none|crc32) 18 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 19. Улучшения в репликации (2)● Поддержка частичных образов в RBR (--binlog-row-image = full|minimal|noblob)● Информационные события для RBR (--binlog-rows-query-log- events)● Оптимизация RBR для таблиц без индексов● UUID для идентификации серверов● Репликация с задержкой (CHANGE MASTER TO .. MASTER_DELAY=N)● Прямая работа с binary log для удаленного сервера mysqlbinlog –read-from-remote-server --host=host_name --raw --stop-never binlog.000130 19 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 20. Расширения системы типов/операций● Поддержка микросекунд для TIME, TIMESTAMP и DATETIME● Поддержка DEFAULT NOW()/ON UPDATE NOW() для DATETIME и нескольких полей, новое поведение TIMESTAMP по умолчанию● Поддержка OpenGIS/точных операций для GIS данных● Поддержка Unicode 5.2 Collation Algorithm и нескольких новых collations (Вьетнамская, Хорватская, Бенгальская, …).● Поддержка UTF-16LE и Unicode в Windows CLI● TO_BASE64()/FROM_BASE64() и WEIGHT_STRING() 20 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 21. Улучшения в обработке ошибок● GET DIAGNOSTICSGET DIAGNOSTICS rows = ROW_COUNT;GET DIAGNOSTICS CONDITION 1 code = RETURNED_SQLSTATE, msg =MESSAGE_TEXT;● Поведение обработчиков ошибок (HANDLER) в хранимых процедурах стало ближе к стандарту 21 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 22. Улучшения в безопасности● SHA-256 хэширование для паролей (sha256_password plugin)● Обфускация пароля (.mylogin.cnf/mysql_config_editor)● ALTER USER … PASSWORD EXPIRE● Plugin API для проверки качества пароля (CREATE USER, GRANT, SET PASSWORD, простой пример validate_password.cc) 22 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 23. Улучшения в partitioning● Улучшена работа с большим числом partition (partition pruning на этапе оптимизации, выигрыш до 5x и более на 1K partition, 8K теперь реальность!).● Возможность явного задания partition в операторе SELECT * FROM employees PARTITION (p0, p2); DELETE FROM employees PARTITION (p0, p1); UPDATE employees PARTITION (p0) SET store_id = 2 WHERE fname = Jill; SELECT e.id, s.city FROM employees AS e JOIN stores PARTITION (p1) AS s ...;● Импорт/Экспорт в/из таблиц с partitioning ALTER TABLE e EXCHANGE PARTITION p0 WITH TABLE e2; 23 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 24. Новое в PERFORMANCE_SCHEMA● PERFORMANCE_SCHEMA включена по умолчанию!● Инструментированы блокировки таблиц, ввод-вывод в таблицы и сетевой ввод-вывод.● Аггрегирование статистики для блокировок и ввода-вывода● Инструментированы операторы● Инструментированы этапы выполнения операторов● Поддержка digests для операторов и аггрегирование по ним● Фильтрация по пользователям, сессиям и таблицам● P_S.HOST_CACHE 24 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 25. PERFORMANCE_SCHEMA: инструментирован ввод-вывод в таблицыТаблицы table_io_waits_summary_by*:SELECT OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_READ, SUM_TIMER_READ,COUNT_INSERT, SUM_TIMER_INSERT FROM performance_schema.table_io_waits_summary_by_tableWHERE OBJECT_NAME=t1;OBJECT_ OBJECT_NAME COUNT_STAR COUNT_READ SUM_TIMER_READ COUNT_INSERT SUM_TIMER_INSERTSCHEMA test t1 9 5 16071156 4 53219976SELECT OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME, COUNT_STAR, COUNT_READ,SUM_TIMER_READ FROM performance_schema.table_io_waits_summary_by_index_usage WHEREOBJECT_NAME=t1; OBJECT_ OBJECT_NAME INDEX_NAME COUNT_STAR COUNT_READ SUM_TIMER_READ SCHEMA test t1 PRIMARY 0 0 0 test t1 j 4 4 101279076 test t1 NULL 4 0 0 25 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 26. PERFORMANCE_SCHEMA: инструментированы операторыТаблицы events_statements_*, events_statements_summary_*:SELECT THREAD_ID, EVENT_NAME, TIMER_WAIT, SQL_TEXT, ROWS_SENT, ROWS_EXAMINED, CREATED_TMP_TABLES, NO_INDEX_USED FROM performance_schema.events_statements_history LIMIT 3, 3;THRE EVENT_NAME TIMER_WAIT SQL_TEXT ROWS ROWS_EX CREATED_T NO_INDEAD_ID _SENT AMINED MP_TABLES X_USED 16 statement/sql/creat 1572757000 create table t1 (i int) 0 0 0 0 e_table 16 statement/sql/insert 1129054000 insert into t1 values (1), (2), 0 0 0 0 (3) 16 statement/sql/select 678927000 select * from t1 where i = 2 1 3 0 1SELECT THREAD_ID, EVENT_NAME, SUM_TIMER_WAIT, AVG_TIMER_WAIT, SUM_ROWS_SENT, SUM_NO_INDEX_USED FROM performance_schema.events_statements_summary_by_thread_by_event_name WHERE THREAD_ID=16 LIMIT 1; THREAD_ID EVENT_NAME SUM_TIMER_WAIT AVG_TIMER_WAIT SUM_ROWS_SENT SUM_NO_INDEX_U SED 16 statement/sql/select 1062565000 265641000 1 1 26 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 27. PERFORMANCE_SCHEMA: инструментированы этапы выполнения операторовТаблицы event_stages_*, event_stages_summary_*:SELECT EVENT_NAME, SOURCE, TIMER_START, TIMER_WAIT FROM performance_schema.events_stages_history WHERE THREAD_ID=16 AND NESTING_EVENT_ID=343 ORDER BY TIMER_WAIT DESC LIMIT 5; EVENT_NAME SOURCE TIMER_START TIMER_WAIT stage/sql/init sql_parse.cc:936 552715025748 66623746 stage/sql/Opening sql_base.cc:4805 552788106302 29843681 tables stage/sql/preparing sql_select.cc:1977 552876811982 21863187 stage/sql/init sql_select.cc:3588 552831727471 20826223 stage/sql/System lock lock.cc:324 552817949983 13777488 27 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 28. PERFORMANCE_SCHEMA: добавлена поддержка digests для операторов и аггрегирование по нимТаблица events_statements_summary_by_digestSELECT SCHEMA_NAME, DIGEST, DIGEST_TEXT, COUNT_STAR, SUM_ROWS_SENT SUM_ROWS_EXAMINED, SUM_NO_INDEX_USED FROM performance_schema.events_statements_summary_by_digest LIMIT 1, 2;SCHEMA DIGEST DIGEST_TEXT COUNT_ SUM_ROWS_E SUM_NO_I _NAME STAR XAMINED NDEX_USE D test 449be9e4a75d65e7bf9cdc74fde1a406 INSERT INTO t1 VALUES (...) /* , ... */ 1 0 0 test 820da79addca10faffe250847d91961f SELECT * FROM t1 WHERE j IN (...) 1 2 0 28 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 29. Кроме того● Хранимые процедуры больше не ломаются параллельным DDL● Table Cache разбит на несколько partitions● Добавлена поддержка пользовательских аттрибутов для соединения (mysql_options(), P_S.session_connect_attrs)● Изменены значения по умолчанию для многих параметров! 29 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 30. Memcached API для InnoDB● Daemon plugin для MySQL● Прямой доступ к InnoDB● Поддерживает бинарный и текстовый протокол● Поддерживает значения из нескольких полей● Опционально поддерживает локальное кэширование● Поддерживает batch операции для чтения и записи● Поддерживает простую аутентификацию через SASL 30 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 31. ● Подробнее о MySQL-5.6: – http://dev.mysql.com/doc/refman/5.6/en/mysql-nutshell.html – http://dev.mysql.com/doc/refman/5.6/en/news-5-6-x.html● Загрузить MySQL-5.6.10: – http://dev.mysql.com/downloads/mysql/#downloads 31 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.