32
<Insert Picture Here> 5.6 новая стабильная ветка MySQL Server. Дмитрий Ленев, Март 2013, Москва

My sql 5.6-new-stable-mmug

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: My sql 5.6-new-stable-mmug

<Insert Picture Here>

5.6 новая стабильная ветка MySQL Server.Дмитрий Ленев, Март 2013, Москва

Page 2: My sql 5.6-new-stable-mmug

2 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

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.7

Page 3: My sql 5.6-new-stable-mmug

3 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Основные направления улучшений в MySQL 5.6

● Оптимизатор/выполнение запросов

● InnoDB

● Репликация

● Расширение типов и новые операции

● Улучшения в безопасности

● performance_schema

● Memcached API для INNODB

Page 4: My sql 5.6-new-stable-mmug

4 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Улучшения в оптимизаторе/выполнении запросов (скорость).

● Index Condition Pushdown

● Disk Sweep Multi-Range Read

● Batched Key Access для соединений (joins)

● Оптимизации выполнения подзапросов:

– Через материализацию

– Через semi-join

– Отложенная материализация для подзапросов из FROM/views

– Игнорирование клауз подзапроса не влияющих на результат

● Улучшение выполнения запросов с ORDER BY (filesort)

● Оптимизированный анализ селективности для IN

Page 5: My sql 5.6-new-stable-mmug

5 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Index Condition Pushdown

Storage 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 21 AND 22;

Page 6: My sql 5.6-new-stable-mmug

6 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

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}.

Page 7: My sql 5.6-new-stable-mmug

7 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Batched Key Access в соединениях

● Для соединений с доступом к одной из табличек по ключу

– Накопить строки из первой таблички в буфере

– Запросить строки из второй таблички, с ключем, одним запросом, используя DS MRR

– Получить строки по одной от storage engine для соединения (с ссылкой на элемент в буфере)

Page 8: My sql 5.6-new-stable-mmug

8 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Оптимизации в выполнении подзапросов

● Выполнение через материализацию

SELECT * FROM t1 WHERE t1.a IN (SELECT t2.b FROM t2 WHERE where_condition);

● Выполнение через semi-join

SELECT * FROM nation WHERE n_regionkey IN (SELECT r_regionkey FROM region WHERE 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 …) )

Page 9: My sql 5.6-new-stable-mmug

9 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Прочие улучшения в оптимизации/выполнении запросов

● Улучшение выполнения запросов с ORDER BY (filesort) (для запросов c ORDER BY non_indexed_column и LIMIT x, и случаев когда x строк помещаются в sort buffer)

● Оптимизированный анализ статистики для IN (параметр eq_range_index_dive_limit, определяет будем ли мы делать нырки в индекс или использовать статистику по индексу).

Page 10: My sql 5.6-new-stable-mmug

10 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

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

● Optimizer trace (SET optimizer_trace=..., I_S.OPTIMIZER_TRACE)

● EXPLAIN для INSERT/UPDATE/DELETE

EXPLAIN UPDATE t1 SET c2=12345 WHERE (c1, c2) IN ((3, 1));

● EXPLAIN в JSON формате (EXPLAIN FORMAT=JSON ...)

● Определение стратегии обработки ORDER BY на этапе оптимизации

id select_type table type possible_keys key key_len ref row Extra

1 SIMPLE t1 range PRIMARY PRIMARY 4 NULL 1 Using where

Page 11: My sql 5.6-new-stable-mmug

11 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Новые возможности в 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)

Page 12: My sql 5.6-new-stable-mmug

12 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Новые возможности в 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

Page 13: My sql 5.6-new-stable-mmug

13 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Производительность и масштабируемость в 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/*)

Page 14: My sql 5.6-new-stable-mmug

14 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Производительность и масштабируемость в InnoDB (2)

● Поддержка страниц уменьшенного размера (4K и 8К при 16К по умолчанию, SSD!, --innodb-page-size)

● Поддержка UNDO журнала в отдельных tablespace (SSD!, --innodb-undo-directory=)

● Поддержка аппаратного вычисления контрольных сумм для страниц (--innodb-checksum-algorithm=)

Page 15: My sql 5.6-new-stable-mmug

15 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Производительность и масштабируемость в 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)

Page 16: My sql 5.6-new-stable-mmug

16 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Производительность и масштабируемость в InnoDB (4)

● Несколько purge ниток (--innodb_purge_threads, <=32)

● Отдельная нить для выталкивания страниц из buffer pool (вместо master thread), новый алгоритм выталкивания (DimitriK)

● Улучшен механизм управление нитями в InnoDB

● Оптимизировано использование кэша процессора (до 50% в OLTP-RO, до 6 раз в RO-S-Ranges)

Page 17: My sql 5.6-new-stable-mmug

17 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Производительность и масштабируемость InnoDB по сравнению с MySQL 5.5

Page 18: My sql 5.6-new-stable-mmug

18 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Улучшения в репликации (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)

Page 19: My sql 5.6-new-stable-mmug

19 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Улучшения в репликации (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

Page 20: My sql 5.6-new-stable-mmug

20 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Расширения системы типов/операций

● Поддержка микросекунд для 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()

Page 21: My sql 5.6-new-stable-mmug

21 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Улучшения в обработке ошибок

● GET DIAGNOSTICS

GET DIAGNOSTICS rows = ROW_COUNT;

GET DIAGNOSTICS CONDITION 1 code = RETURNED_SQLSTATE, msg = MESSAGE_TEXT;

● Поведение обработчиков ошибок (HANDLER) в хранимых процедурах стало ближе к стандарту

Page 22: My sql 5.6-new-stable-mmug

22 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

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

● SHA-256 хэширование для паролей (sha256_password plugin)

● Обфускация пароля (.mylogin.cnf/mysql_config_editor)

● ALTER USER … PASSWORD EXPIRE

● Plugin API для проверки качества пароля (CREATE USER, GRANT, SET PASSWORD, простой пример validate_password.cc)

Page 23: My sql 5.6-new-stable-mmug

23 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Улучшения в 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;

Page 24: My sql 5.6-new-stable-mmug

24 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Новое в PERFORMANCE_SCHEMA

● PERFORMANCE_SCHEMA включена по умолчанию!

● Инструментированы блокировки таблиц, ввод-вывод в таблицы и сетевой ввод-вывод.

● Аггрегирование статистики для блокировок и ввода-вывода

● Инструментированы операторы

● Инструментированы этапы выполнения операторов

● Поддержка digests для операторов и аггрегирование по ним

● Фильтрация по пользователям, сессиям и таблицам

● P_S.HOST_CACHE

Page 25: My sql 5.6-new-stable-mmug

25 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

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_table WHERE OBJECT_NAME='t1';

SELECT OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME, COUNT_STAR, COUNT_READ, SUM_TIMER_READ FROM performance_schema.table_io_waits_summary_by_index_usage WHERE OBJECT_NAME='t1';

OBJECT_SCHEMA

OBJECT_NAME COUNT_STAR COUNT_READ SUM_TIMER_READ COUNT_INSERT SUM_TIMER_INSERT

test t1 9 5 16071156 4 53219976

OBJECT_SCHEMA OBJECT_NAME INDEX_NAME COUNT_STAR COUNT_READ SUM_TIMER_READ

test t1 PRIMARY 0 0 0

test t1 j 4 4 101279076

test t1 NULL 4 0 0

Page 26: My sql 5.6-new-stable-mmug

26 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

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;

SELECT 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 TIMER_WAIT SQL_TEXT ROWS_SENT

ROWS_EXAMINED

CREATED_TMP_TABLES

NO_INDEX_USED

16 statement/sql/create_table

1572757000 create table t1 (i int) 0 0 0 0

16 statement/sql/insert 1129054000 insert into t1 values (1), (2), (3)

0 0 0 0

16 statement/sql/select 678927000 select * from t1 where i = 2 1 3 0 1

THREAD_ID EVENT_NAME SUM_TIMER_WAIT AVG_TIMER_WAIT SUM_ROWS_SENT SUM_NO_INDEX_USED

16 statement/sql/select 1062565000 265641000 1 1

Page 27: My sql 5.6-new-stable-mmug

27 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

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 tables

sql_base.cc:4805 552788106302 29843681

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

Page 28: My sql 5.6-new-stable-mmug

28 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

PERFORMANCE_SCHEMA: добавлена поддержка digests для операторов и

аггрегирование по нимТаблица events_statements_summary_by_digest

SELECT 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_NAME

DIGEST DIGEST_TEXT COUNT_STAR

SUM_ROWS_EXAMINED

SUM_NO_INDEX_USE

D

test 449be9e4a75d65e7bf9cdc74fde1a406 INSERT INTO t1 VALUES (...) /* , ... */ 1 0 0

test 820da79addca10faffe250847d91961f SELECT * FROM t1 WHERE j IN (...) 1 2 0

Page 29: My sql 5.6-new-stable-mmug

29 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Кроме того

● Хранимые процедуры больше не ломаются параллельным DDL

● Table Cache разбит на несколько partitions

● Добавлена поддержка пользовательских аттрибутов для соединения (mysql_options(), P_S.session_connect_attrs)

● Изменены значения по умолчанию для многих параметров!

Page 30: My sql 5.6-new-stable-mmug

30 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Memcached API для InnoDB

● Daemon plugin для MySQL

● Прямой доступ к InnoDB

● Поддерживает бинарный и текстовый протокол

● Поддерживает значения из нескольких полей

● Опционально поддерживает локальное кэширование

● Поддерживает batch операции для чтения и записи

● Поддерживает простую аутентификацию через SASL

Page 31: My sql 5.6-new-stable-mmug

31 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

● Подробнее о 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

Page 32: My sql 5.6-new-stable-mmug