<Insert Picture Here>




5.6 новая стабильная ветка MySQL Server.
Дмитрий Ленев, Март 2013, Москва
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
2   Copyright © 2012, Oracle and/or its affiliates. All rights
    reserved.
Основные направления улучшений в MySQL 5.6


●
        Оптимизатор/выполнение запросов
●
        InnoDB
●
        Репликация
●
        Расширение типов и новые операции
●
        Улучшения в безопасности
●
        performance_schema


●
        Memcached API для INNODB

    3   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

    4   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;

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

  6   Copyright © 2012, Oracle and/or its affiliates. All rights
      reserved.
Batched Key Access в соединениях


●
        Для соединений с доступом к одной из табличек по
        ключу
        – Накопить строки из первой таблички в буфере
        – Запросить строки из второй таблички, с ключем, одним запросом,
          используя DS MRR
        – Получить строки по одной от storage engine для соединения (с ссылкой
          на элемент в буфере)




    7    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 …) )




    8   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, определяет будем ли мы делать нырки в
        индекс или использовать статистику по индексу).




    9   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));
 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.
Новые возможности в 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.
Новые возможности в 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.
Производительность и масштабируемость в
                       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.
Производительность и масштабируемость в
                       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.
Производительность и масштабируемость в
                        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.
Производительность и масштабируемость в
                       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.
Производительность и масштабируемость
            InnoDB по сравнению с MySQL 5.5




17   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)


    18   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

    19   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()




    20   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) в
         хранимых процедурах стало ближе к стандарту




    21   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)




    22   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;


    23    Copyright © 2012, Oracle and/or its affiliates. All rights
          reserved.
Новое в PERFORMANCE_SCHEMA


●        PERFORMANCE_SCHEMA включена по умолчанию!
●        Инструментированы блокировки таблиц, ввод-вывод в таблицы и
         сетевой ввод-вывод.
●        Аггрегирование статистики для блокировок и ввода-вывода
●        Инструментированы операторы
●        Инструментированы этапы выполнения операторов
●        Поддержка digests для операторов и аггрегирование по ним
●        Фильтрация по пользователям, сессиям и таблицам
●        P_S.HOST_CACHE




    24   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';

OBJECT_              OBJECT_NAME                           COUNT_STAR             COUNT_READ    SUM_TIMER_READ    COUNT_INSERT    SUM_TIMER_INSERT
SCHEMA

  test                            t1                                  9                5           16071156            4               53219976


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_                   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.
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_INDE
AD_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             1


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                 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.
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.
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                                     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.
Кроме того


●
         Хранимые процедуры больше не ломаются
         параллельным DDL
●
         Table Cache разбит на несколько partitions
●
         Добавлена поддержка пользовательских аттрибутов
         для соединения (mysql_options(), P_S.session_connect_attrs)
●
         Изменены значения по умолчанию для многих
         параметров!




    29   Copyright © 2012, Oracle and/or its affiliates. All rights
         reserved.
Memcached API для InnoDB
●
         Daemon plugin для MySQL
●
         Прямой доступ к InnoDB
●
         Поддерживает бинарный и
         текстовый протокол
●
         Поддерживает значения из
         нескольких полей
●
         Опционально поддерживает
         локальное кэширование
●
         Поддерживает batch операции
         для чтения и записи
●
         Поддерживает простую
         аутентификацию через SASL




    30   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




    31    Copyright © 2012, Oracle and/or its affiliates. All rights
          reserved.
My sql 5.6-new-stable-mmug

My sql 5.6-new-stable-mmug

  • 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.7 2 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 Pushdown Storageengine при чтении по индексу проверяет часть условия которая зависит только от полей в индексе, не читая всю строку и не возвращая управление 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; 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-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 …) ) 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/DELETE EXPLAIN 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.5 17 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 DIAGNOSTICS GET 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_table WHERE OBJECT_NAME='t1'; OBJECT_ OBJECT_NAME COUNT_STAR COUNT_READ SUM_TIMER_READ COUNT_INSERT SUM_TIMER_INSERT SCHEMA test t1 9 5 16071156 4 53219976 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_ 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_INDE AD_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 1 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 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_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 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.