Devconf2010 mariadb-extra-features
-
Upload
sergey-petrunya -
Category
Documents
-
view
376 -
download
0
Transcript of Devconf2010 mariadb-extra-features
Ветка MySQL c большими возможностями
Сергей Петруня ([email protected])Monty Program Ab
ветка MySQL сдополнительными возможностями
• Совместима с MySQL (в отличие от Drizzle)• “Branch” а не “fork”
● изменения из MySQL периодически мержатся• Включает разработки
● Sun/MySQL• Более открытый процесс разработки
● *Весь* исходный код на launchpad.net● Более открыты для приема сторонних патчей
• Еще имя "Maria" носит один из табличных движков, поставляющихся в составе MariaDB.
● Monty Program Ab ● Третьих сторон
Текущее состояние MariaDB• MariaDB 5.1
– MariaDB 5.1.32 Beta – 20.04.2009– MariaDB 5.1.38 Beta – 29.10.2009– MariaDB 5.1.39 Beta – 15.11.2009– MariaDB 5.1.41 RC – 13.01.2010 – MariaDB 5.1.42 Stable – 01.02.2010– MariaDB 5.1.44 Stable – 24.03.2010
• MariaDB 5.2– MariaDB 5.2.0 Beta - 10.04.2010
• MariaDB 5.3– Активная разработка (доступно только дерево)
Дополнительные возможности в MariaDB 5.1
• Табличный движок XtraDB• Больше статистики в Slow query log• В processlist время указывается с точностью
до микросекунды• Оптимизация Table Elimination• Табличный движок PBXT• Табличный движок Maria• Поддержка пула тредов• utf8_croatian_ci, ucs2_croatian_ci collations• Табличный движок FederatedX.
Дополнительные возможности в MariaDB 5.1
• Табличный движок XtraDB• Больше статистики в Slow query log• В processlist время указывается с точностью
до микросекунды• Оптимизация Table Elimination• Табличный движок PBXT• Табличный движок Maria• Поддержка пула тредов• utf8_croatian_ci, ucs2_croatian_ci collations• Табличный движок FederatedX.
Табличный движок ХtraDB – история• Состояние до 2005 г
– MySQL Ab разрабатывает MySQL– Innobase Oy разрабатывает InnoDB– InnoDB включен в поставку MySQL
InnoDB
MySQL
• 2007 г – Google выпускает “google patch”– Патч затрагивает и MySQL и InnoDB– InnoDB часть включает– Улучшения производительности– Транзакционную репликацию
MySQL
GoogleInnoDB
Табличный движок ХtraDB – история (2)
• Апрель 2008: Oracle/Innobase выпускает InnoDB plugin некоторыми изменениями на основе google patch
InnoDB
MySQL
MySQL
InnoDBplugin
InnoDBplugin
• Декабрь 2008: Percona, Inc выпускает XtraDB– Это InnoDB Plugin с дополнительными
улучшениями
InnoDB
MySQL
MySQL
XtraDB
XtraDB
InnoDB
MySQL
MySQL
XtraDB
XtraDB
Табличный движок ХtraDB – история (3)• 2009 г: Monty Program включает XtraDB
в состав MariaDB
InnoDB
MySQL
MySQL
InnoDBplugin
InnoDBplugin
InnoDB
MySQL
MySQL
XtraDB
XtraDB
InnoDB
MySQL
MySQL
XtraDB
XtraDB
MySQL
XtraDB
MariaDB
XtraDB
Отличия InnoDB Plugin от InnoDB
На самом деле
• Быстрое создание/удаление индексов
• Улучшенная производительность при высокой нагрузке и большом числе параллельных транзакций
• Новые способы хранения данных– Компрессия дисковых даных
– управляемые upgrade/downgrade
• Больше диагностики через INFORMATION_SCHEMA
• Прочие улучшения
– TRUNCATE TABLE освобождает место
– innodb_strict_mode – ошибки вместо warnings.
На первый взгляд, никаких:
CREATE TABLE tbl (...) engine=innodb;
Отличия XtraDB
На самом деле:
• Дальнейшие улучшения производительности при параллельной работе– Больше настраиваемых параметров
– Fuzzy checkpointing (более ровная производительность)
• Более быстрое восстановление после сбоев
• Еще больше диагностической информации
• Возможность сохранить/восстановить buffer pool– Можно избежать “холодных стартов”
• Куча более мелких улучшений, ориентированных продвинутых DBA.
Опять: на первый взгляд, никаких:
CREATE TABLE tbl (...) engine=innodb;
Дополнительные возможности в MariaDB 5.1
• Табличный движок XtraDB• Больше статистики в Slow query log• В processlist время указывается с
точностью до микросекунды• Оптимизация Table Elimination• Табличный движок PBXT• Табличный движок Maria• Поддержка пула тредов• utf8_croatian_ci, ucs2_croatian_ci collations• Табличный движок FederatedX
Больше информации в slow query log (1) # my.cnf slow_query_log=/path/to/slow.log+log_slow_verbosity=query_plan+log_slow_filter=name,name,...+log_slow_rate_limit=n
name:− admin− filesort, filesort_on_disk, − full_join,− full_scan− query_cache,query_cache_miss,− tmp_table, tmp_table_on_disk.
n: каждый n-ый запрос
Больше информации в slow query log (2)MySQL # Time: ...# User@Host: root[root] @ localhost []# Query_time: 3.480293 Lock_time: 0.000754 Rows_sent: 1 Rows_examined: 10use test;SET timestamp=...;select count(*) from one_k A, one_k B, ten C where A.a < B.a;
# Time: ...# User@Host: root[root] @ localhost []# Thread_id: 1 Schema: test QC_hit: No# Query_time: 4.605642 Lock_time: 0.000964 Rows_sent: 1 Rows_examined: 10# Full_scan: Yes Full_join: Yes Tmp_table: No Tmp_table_on_disk: No# Filesort: No Filesort_on_disk: No Merge_passes: 0SET timestamp=...;select count(*) from one_k A, one_k B, ten C where A.a < B.a;
MariaDB
Микросекунды в PROCESSLIST• Основано на microsec_process.patch от Percona• PROCESSLIST показывает микросекунды
– Полезно, когда есть множество мелких запросов
MySQL [(test)]> select * from information_schema.processlist;++++++++...+| ID | USER | HOST | DB | COMMAND | TIME | STATE | INFO |++++++++...+| 2 | root | localhost | test | Query | 2 | Sending data | select |
MariaDB [(test)]> select * from information_schema.processlist;++++++++...++| ID | USER | HOST | DB | COMMAND | TIME | STATE | INFO | TIME_MS |++++++++...++| 2 | root | localhost | test | Query | 0 | executing | select | 1.363 |
MariaDB:
MySQL:
Дополнительные возможности в MariaDB 5.1
• Табличный движок XtraDB• Больше статистики в Slow query log• В processlist время указывается с точностью
до микросекунды• Оптимизация Table Elimination• Табличный движок PBXT• Табличный движок Maria• Поддержка пула тредов• utf8_croatian_ci, ucs2_croatian_ci collations• Табличный движок FederatedX
Оптимизация Table Elimination• Применима к запросам к сильно нормализованным данным• Реализована в Oracle, SQL Server, etc
– И будет в PostgreSQL 9.0, называется “join removal”• Идея:
SELECT tbl1.*FROM tbl1 LEFT JOIN tbl2 ON tbl2.primary_key=tbl1.id
WHERE condition(tbl1.*)
Найти OUTER JOIN'ы, у которых внутренняя часть “не используется”, и удалить эти внутренние части
Оптимизация Table Elimination
SELECT tbl1.*FROM tbl1 LEFT JOIN tbl2 ON tbl2.primary_key=tbl1.id
WHERE condition(tbl1.*)
Найти OUTER JOIN'ы, у которых внутренняя часть “не используется”, и удалить эти внутренние части
Для каждой записи из tbl1:1. tbl2 будет иметь максимум одну соответсвующую запись
(из-за условия tbl2.primary_key=...)2. если в tbl2 не будет соответствующей записи, OUTER
JOIN сгенерирует запись с NULL'ами3. для результата запроса не важно, реализуется ли #1 или
#2.
Когда применима Table Elimination (1)• Высокая степень нормализации, например
actor(name, date_of_birth, rating)
представляется как
create table ac_anchor(AC_ID int primary key);
create table ac_name(AC_ID int, ACNAM_name char(N), primary key(AC_ID));
create table ac_dob(AC_ID int, ACDOB_birthdate date, primary key(AC_ID));
create table ac_rating(AC_ID int, ACRAT_rating int, ACRAT_fromdate date, primary key(AC_ID, ACRAT_fromdate));
Когда применима Table Elimination (2)• Выборка в денорма-
лизованном виде:
select ac_anchor.AC_ID, ACNAM_Name, ACDOB_birthdate, ACRAT_ratingfrom ac_anchor left join ac_name on ac_anchor.AC_ID=ac_name.AC_ID left join ac_dob on ac_anchor.AC_ID=ac_dob.AC_ID left join ac_rating on (ac_anchor.AC_ID=ac_rating.AC_ID and ac_rating.ACRAT_fromdate = (select max(sub.ACRAT_fromdate) from ac_rating sub where sub.AC_I=ac_rating.AC_ID))
create view actors as select * from
select ACRAT_rating from actors where ACNAM_name=’Gary Oldman’;
explain select ACRAT_rating from actors where ACNAM_name='Gary Oldman';+++++++++..| id | select_type | table | type | possible_keys | key | key_len | ref +++++++++..| 1 | PRIMARY | ac_anchor | index | PRIMARY | PRIMARY | 4 | NULL | | 1 | PRIMARY | ac_name | eq_ref | PRIMARY | PRIMARY | 4 | ac_anchor.AC_ID | | 1 | PRIMARY | ac_rating | ref | PRIMARY | PRIMARY | 4 | ac_anchor.AC_ID | | 3 | DEPENDENT SUBQUERY | sub | ref | PRIMARY | PRIMARY | 4 | ac_rating.AC_ID | +++++++++..
explain select ACDOB_birthdate from actors where ACNAM_name='Gary Oldman';+++++++++..| id | select_type | table | type | possible_keys | key | key_len | ref +++++++++..| 1 | PRIMARY | ac_anchor | index | PRIMARY | PRIMARY | 4 | NULL | | 1 | PRIMARY | ac_name | eq_ref | PRIMARY | PRIMARY | 4 | ac_anchor.AC_ID | | 1 | PRIMARY | ac_dob | eq_ref | PRIMARY | PRIMARY | 4 | ac_anchor.AC_ID | +++++++++..
explain select ACRAT_rating, ACDOB_birthdate from actors where ACNAM_name='Gary Oldman';+++++++++..| id | select_type | table | type | possible_keys | key | key_len | ref +++++++++..| 1 | PRIMARY | ac_anchor | index | PRIMARY | PRIMARY | 4 | NULL | | 1 | PRIMARY | ac_name | eq_ref | PRIMARY | PRIMARY | 4 | ac_anchor.AC_ID | | 1 | PRIMARY | ac_dob | eq_ref | PRIMARY | PRIMARY | 4 | ac_anchor.AC_ID | | 1 | PRIMARY | ac_rating | ref | PRIMARY | PRIMARY | 4 | ac_anchor.AC_ID | | 3 | DEPENDENT SUBQUERY | sub | ref | PRIMARY | PRIMARY | 4 | ac_rating.AC_ID | +++++++++..
Table Elimination - примеры
Table elimination – выводы
• Покрывает следующий сценарий использования:– Необязательные и/или версионированные
колонки хранятся в отдельных таблицах– Имеется VIEW c денормализованным
представлением• При этом
– Можно писать простые запросы к VIEW– Неиспользуемые колонки не будут замедлять
работу.
Дополнительные возможности в MariaDB 5.1
• Табличный движок XtraDB• Больше статистики в Slow query log• В processlist время указывается с точностью
до микросекунды• Оптимизация Table Elimination• Табличный движок PBXT• Табличный движок Maria• Поддержка пула тредов• utf8_croatian_ci, ucs2_croatian_ci collations• Табличный движок FederatedX
Табличный движок PBXT• Разрабатывается PrimeBase technologies• Выполняет требования ACID• Архитектура основана на логах
– нет in-place updates
• Показывает хорошую производительность при большом числе клиентов и CPU-bound загрузке
• Дальнейшая информация на http://primebase.org.
Табличный движок Maria• Основан на MyISAM
– Поддерживает fulltext и GIS индексы
• Отличия от MyISAM:– Наличие Page Сache (в MyISAM только key
cache)– Crash-safety– Полная транзакционность – в планах
• В MariaDB используется вместо MyISAM для временных таблиц– ./configure имеет параметр для выбора между
использованием Maria и MyISAM.
Пул тредов• Традиционная модель MySQL: сервер это один процесс,
каждому клиентскому соединению выделяется тред• Пул тредов: все соединения обслуживаются пулом из N=const
тредов.
# my.cnfthreadhandling= onethreadperconnectionthreadpoolsize= 20
extraport=#extramaxconnections=#
• Известные недостатки– Если запрос ожидает I/O или блокировки, выполняющий
его тред не возвращается обратно в пул– При большом числе клиентов производительность может
быть ниже, чем у традиционной модели.
Табличный движок FederatedX
• Это Federated из MySQL 5.1 с некоторыми исправленными ошибками.
Дополнительные возможности в MariaDB 5.1
• Табличный движок XtraDB• Больше статистики в Slow query log• В processlist время указывается с точностью
до микросекунды• Оптимизация Table Elimination• Табличный движок PBXT• Табличный движок Maria• Поддержка пула тредов• utf8_croatian_ci, ucs2_croatian_ci collations• Табличный движок FederatedX
Все это доступно в Stable версии
Cовместимость с MySQL
* - имена утилит, программ, библиотек одинаковы, поэтому нельзя установить одновременно MySQL и MariaDB
** - Если не используются фичи, специфичные для MariaDB (например PBXT или croatian_utf8_ci)
Библиотека libmysql Да
Клиент-серверный протокол Да
Имена и синтаксис аргументов утилит Да*
Диалект SQL Да
Плагины сервера Не проверяли
Репликация Да**
Data directory (заменить бинарник MariaDB на MySQL и запустить)
Туда: ДаОбратно: Да**
MariaDB 5.2Цель релиза:
включить известные испытанные патчи, а также собственные небольшие и/или безопасные фичи
Новые возможности• Включен userstatsv2 патч
• Виртуальные колонки
• mysqlbinlog поддерживает –rewrite-db
• Partitioned MyISAM key cache
• Поддержка атрибутов колонок/индексов/таблиц
• Поддержка плагинов аутентификации
• Обновления XtraDB и PBXT.
MariaDB 5.2, userstats v2 patch (1)MariaDB > set global userstat=1; ...MariaDB > select * from information_schema.user_statistics;*************************** 1. row *************************** USER: web TOTAL_CONNECTIONS: 1CONCURRENT_CONNECTIONS: 0 CONNECTED_TIME: 4 BUSY_TIME: 0.004146 CPU_TIME: 0.0036062 BYTES_RECEIVED: 61 BYTES_SENT: 169 ROWS_READ: 0 ROWS_SENT: 2 ROWS_DELETED: 0 ROWS_INSERTED: 0 ROWS_UPDATED: 0 SELECT_COMMANDS: 2 UPDATE_COMMANDS: 0 OTHER_COMMANDS: 0 ...MariaDB > flush user_statistics;
MariaDB 5.2, userstats v2 patch (2)Доступны таблицы• USER_STATISTICS
– Статистика по MySQL-пользователям
• CLIENT_STATISTICS– То же, что предыдущее но по клиентским хостам
• INDEX_STATISTICS– ROWS_READ для каждого использовавшегося
индекса
• TABLE_STATISTICS– ROWS_READ, ROWS_CHANGED и
ROWS_CHANGED_X_INDEXES для каждой таблицы.
MariaDB 5.2 - Виртуальные колонки
Поддерживается два типа• VIRTUAL: не хранятся, всегда вычисляются
на лету– На текущий момент не могут быть
индексированы• PERSISTENT: хранятся в таблице
– могут быть частью индексов.
create table tbl ( … column typename AS (expression) [VIRTUAL|PERSISTENT], … );
MariaDB 5.2 – остальные фичи• mysqlbinlog поддерживает --rewrite-db
– Это аналог опции –replicate-rewrite-db у slave– Можно “залить” row-based binary log в другую бд
• SegmentedPartitioned MyISAM Key Cache– За счет разбивки на части снижается конкуренция
за мьютексы
• Поддержка атрибутов колонок/индексов/таблиц• Поддержка плагинов аутентификации• Обновления XtraDB и PBXT
MariaDB 5.2 Beta• userstatsv2 патч• Виртуальные колонки• mysqlbinlog поддерживает –rewrite-db• Partitioned MyISAM key cache• Поддержка атрибутов колонок/индексов/таблиц• Поддержка плагинов аутентификации• Обновления XtraDB и PBXT
MariaDB 5.3• Находится в фазе активной разработки• Основной фокус на оптимизации
подзапросов– В первую очередь: expr IN (SELECT …)– Во вторую:
SELECT … FROM (SELECT …)– В третью: любые коррелированные
подзапросы
• Еще могут быть фичи– Улучшения в системе репликации– Что-то другое.
MariaDB - выводы• Испытанные патчи и новые фичи
собраны и выпущены в виде исходников и бинарников
• MariaDB 5.1 – уже давно Stable• MariaDB 5.2 – Beta• Совместима с MySQL, можно
– Использовать MySQL-клиенты– Мигрировать туда-обратно– Подключить MariaDB как replication slave– => легко попробовать.
Ссылки• MariaDB manual and downloads http://askmonty.org
• “Дополнительные возможности InnoDB и XtraDB” http://askmonty.org/wiki/Image:Std2010-innodb-xtradb.pdf
• Эти слайды: http://askmonty.org/wiki/Image:devconf2010-mariadb.pdf