Your SlideShare is downloading. ×
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
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

Devconf2010 mariadb-extra-features

358

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
358
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
5
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. Ветка MySQL c большими возможностями Сергей Петруня (psergey@askmonty.org) Monty Program Ab
  • 2. ветка MySQL с дополнительными возможностями• Совместима с MySQL (в отличие от Drizzle)• “Branch” а не “fork” ● изменения из MySQL периодически мержатся• Включает разработки ● Sun/MySQL ● Monty Program Ab ● Третьих сторон• Более открытый процесс разработки ● *Весь* исходный код на launchpad.net ● Более открыты для приема сторонних патчей• Еще имя "Maria" носит один из табличных движков, поставляющихся в составе MariaDB.
  • 3. Текущее состояние 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 – Активная разработка (доступно только дерево)
  • 4. Дополнительные возможности в MariaDB 5.1• Табличный движок XtraDB• Больше статистики в Slow query log• В processlist время указывается с точностью до микросекунды• Оптимизация Table Elimination• Табличный движок PBXT• Табличный движок Maria• Поддержка пула тредов• utf8_croatian_ci, ucs2_croatian_ci collations• Табличный движок FederatedX.
  • 5. Дополнительные возможности в MariaDB 5.1• Табличный движок XtraDB• Больше статистики в Slow query log• В processlist время указывается с точностью до микросекунды• Оптимизация Table Elimination• Табличный движок PBXT• Табличный движок Maria• Поддержка пула тредов• utf8_croatian_ci, ucs2_croatian_ci collations• Табличный движок FederatedX.
  • 6. Табличный движок ХtraDB – история• Состояние до 2005 г – MySQL Ab разрабатывает MySQL MySQL – Innobase Oy разрабатывает InnoDB InnoDB – InnoDB включен в поставку MySQL• 2007 г – Google выпускает “google patch” – – Патч затрагивает и MySQL и InnoDB InnoDB часть включает MySQL – Улучшения производительности InnoDB Google – Транзакционную репликацию
  • 7. Табличный движок ХtraDB – история (2) MySQL InnoDB• Апрель 2008: Oracle/Innobase plugin InnoDB выпускает InnoDB plugin некоторыми изменениями на MySQL основе google patch InnoDB plugin MySQL• Декабрь 2008: Percona, Inc XtraDB InnoDB выпускает XtraDB – Это InnoDB Plugin с дополнительными MySQL улучшениями XtraDB
  • 8. Табличный движок ХtraDB – история (3)• 2009 г: Monty Program включает XtraDB в состав MariaDB MySQL MySQL InnoDB plugin InnoDB XtraDB InnoDB MariaDB MySQL XtraDB MySQL MySQL InnoDB plugin XtraDB
  • 9. Отличия InnoDB Plugin от InnoDBНа первый взгляд, никаких: CREATE TABLE tbl (...) engine=innodb;На самом деле• Быстрое создание/удаление индексов• Улучшенная производительность при высокой нагрузке и большом числе параллельных транзакций• Новые способы хранения данных – Компрессия дисковых даных – управляемые upgrade/downgrade• Больше диагностики через INFORMATION_SCHEMA• Прочие улучшения – TRUNCATE TABLE освобождает место – innodb_strict_mode – ошибки вместо warnings.
  • 10. Отличия XtraDBОпять: на первый взгляд, никаких: CREATE TABLE tbl (...) engine=innodb;На самом деле:• Дальнейшие улучшения производительности при параллельной работе – Больше настраиваемых параметров – Fuzzy checkpointing (более ровная производительность)• Более быстрое восстановление после сбоев• Еще больше диагностической информации• Возможность сохранить/восстановить buffer pool – Можно избежать “холодных стартов”• Куча более мелких улучшений, ориентированных продвинутых DBA.
  • 11. Дополнительные возможности в MariaDB 5.1• Табличный движок XtraDB• Больше статистики в Slow query log• В processlist время указывается с точностью до микросекунды• Оптимизация Table Elimination• Табличный движок PBXT• Табличный движок Maria• Поддержка пула тредов• utf8_croatian_ci, ucs2_croatian_ci collations• Табличный движок FederatedX
  • 12. Больше информации в 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: n: каждый n-ый запрос − admin − filesort, filesort_on_disk, − full_join, − full_scan − query_cache,query_cache_miss, − tmp_table, tmp_table_on_disk.
  • 13. Больше информации в slow query log (2) MySQL # Time: ... # User@Host: root[root] @ localhost [] # Query_time: 3.480293  Lock_time: 0.000754 Rows_sent: 1  Rows_examined: 10 use test; SET timestamp=...; select count(*) from one_k A, one_k B, ten C where A.a < B.a;MariaDB# 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;
  • 14. Микросекунды в PROCESSLIST• Основано на microsec_process.patch от Percona• PROCESSLIST показывает микросекунды – Полезно, когда есть множество мелких запросовMySQL: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: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 |
  • 15. Дополнительные возможности в MariaDB 5.1• Табличный движок XtraDB• Больше статистики в Slow query log• В processlist время указывается с точностью до микросекунды• Оптимизация Table Elimination• Табличный движок PBXT• Табличный движок Maria• Поддержка пула тредов• utf8_croatian_ci, ucs2_croatian_ci collations• Табличный движок FederatedX
  • 16. Оптимизация Table Elimination• Применима к запросам к сильно нормализованным данным• Реализована в Oracle, SQL Server, etc – И будет в PostgreSQL 9.0, называется “join removal”• Идея: Найти OUTER JOINы, у которых внутренняя часть “не используется”, и удалить эти внутренние частиSELECT tbl1.* FROM    tbl1 LEFT JOIN tbl2 ON tbl2.primary_key=tbl1.idWHERE  condition(tbl1.*)
  • 17. Оптимизация Table Elimination Найти OUTER JOINы, у которых внутренняя часть “не используется”, и удалить эти внутренние части SELECT tbl1.* FROM    tbl1 LEFT JOIN tbl2 ON tbl2.primary_key=tbl1.id WHERE   condition(tbl1.*)Для каждой записи из tbl1:1. tbl2 будет иметь максимум одну соответсвующую запись (из-за условия tbl2.primary_key=...)2. если в tbl2 не будет соответствующей записи, OUTER JOIN сгенерирует запись с NULLами3. для результата запроса не важно, реализуется ли #1 или #2.
  • 18. Когда применима 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));
  • 19. Когда применима Table Elimination (2)• Выборка в денорма- лизованном виде: create view actors as select * fromselect 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))select ACRAT_rating from actors where ACNAM_name=’Gary Oldman’;
  • 20. Table Elimination - примеры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 | +­­­­+­­­­­­­­­­­­­­­­­­­­+­­­­­­­­­­­+­­­­­­­­+­­­­­­­­­­­­­­­+­­­­­­­­­+­­­­­­­­­+­­­­­­­­­­­­­­­­­+­..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 |    +­­­­+­­­­­­­­­­­­­+­­­­­­­­­­­+­­­­­­­­+­­­­­­­­­­­­­­­+­­­­­­­­­+­­­­­­­­­+­­­­­­­­­­­­­­­­­+­..
  • 21. Table elimination – выводы• Покрывает следующий сценарий использования: – Необязательные и/или версионированные колонки хранятся в отдельных таблицах – Имеется VIEW c денормализованным представлением• При этом – Можно писать простые запросы к VIEW – Неиспользуемые колонки не будут замедлять работу.
  • 22. Дополнительные возможности в MariaDB 5.1• Табличный движок XtraDB• Больше статистики в Slow query log• В processlist время указывается с точностью до микросекунды• Оптимизация Table Elimination• Табличный движок PBXT• Табличный движок Maria• Поддержка пула тредов• utf8_croatian_ci, ucs2_croatian_ci collations• Табличный движок FederatedX
  • 23. Табличный движок PBXT• Разрабатывается PrimeBase technologies• Выполняет требования ACID• Архитектура основана на логах – нет in-place updates• Показывает хорошую производительность при большом числе клиентов и CPU- bound загрузке• Дальнейшая информация на http://primebase.org.
  • 24. Табличный движок Maria• Основан на MyISAM – Поддерживает fulltext и GIS индексы• Отличия от MyISAM: – Наличие Page Сache (в MyISAM только key cache) – Crash-safety – Полная транзакционность – в планах• В MariaDB используется вместо MyISAM для временных таблиц – ./configure имеет параметр для выбора между использованием Maria и MyISAM.
  • 25. Пул тредов• Традиционная модель MySQL: сервер это один процесс, каждому клиентскому соединению выделяется тред• Пул тредов: все соединения обслуживаются пулом из N=const тредов. # my.cnf thread­handling=  one­thread­per­connection thread­pool­size= 20 extra­port=# extra­max­connections=#• Известные недостатки – Если запрос ожидает I/O или блокировки, выполняющий его тред не возвращается обратно в пул – При большом числе клиентов производительность может быть ниже, чем у традиционной модели.
  • 26. Табличный движок FederatedX• Это Federated из MySQL 5.1 с некоторыми исправленными ошибками.
  • 27. Дополнительные возможности в MariaDB 5.1• Табличный движок XtraDB• Больше статистики в Slow query log• В processlist время указывается с точностью до микросекунды• Оптимизация Table Elimination Все это доступно• Табличный движок PBXT в Stable• Табличный движок Maria версии• Поддержка пула тредов• utf8_croatian_ci, ucs2_croatian_ci collations• Табличный движок FederatedX
  • 28. Cовместимость с MySQLБиблиотека libmysql ДаКлиент-серверный протокол ДаИмена и синтаксис аргументов утилит Да*Диалект SQL ДаПлагины сервера Не проверялиРепликация Да**Data directory (заменить бинарник Туда: ДаMariaDB на MySQL и запустить) Обратно: Да*** - имена утилит, программ, библиотек одинаковы, поэтому нельзя установить одновременно MySQL и MariaDB** - Если не используются фичи, специфичные для MariaDB (например PBXT или croatian_utf8_ci)
  • 29. MariaDB 5.2Цель релиза: включить известные испытанные патчи, а также собственные небольшие и/или безопасные фичиНовые возможности• Включен userstatsv2 патч• Виртуальные колонки• mysqlbinlog поддерживает –rewrite-db• Partitioned MyISAM key cache• Поддержка атрибутов колонок/индексов/таблиц• Поддержка плагинов аутентификации• Обновления XtraDB и PBXT.
  • 30. 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;
  • 31. 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 для каждой таблицы.
  • 32. MariaDB 5.2 - Виртуальные колонкиcreate table tbl (  …  column typename AS (expression) [VIRTUAL|PERSISTENT],  … ); Поддерживается два типа • VIRTUAL: не хранятся, всегда вычисляются на лету – На текущий момент не могут быть индексированы • PERSISTENT: хранятся в таблице – могут быть частью индексов.
  • 33. MariaDB 5.2 – остальные фичи• mysqlbinlog поддерживает --rewrite-db – Это аналог опции –replicate-rewrite-db у slave – Можно “залить” row-based binary log в другую бд• SegmentedPartitioned MyISAM Key Cache – За счет разбивки на части снижается конкуренция за мьютексы• Поддержка атрибутов колонок/индексов/таблиц• Поддержка плагинов аутентификации• Обновления XtraDB и PBXT
  • 34. MariaDB 5.2 Beta• userstatsv2 патч• Виртуальные колонки• mysqlbinlog поддерживает –rewrite-db• Partitioned MyISAM key cache• Поддержка атрибутов колонок/индексов/таблиц• Поддержка плагинов аутентификации• Обновления XtraDB и PBXT
  • 35. MariaDB 5.3• Находится в фазе активной разработки• Основной фокус на оптимизации подзапросов – В первую очередь: expr IN (SELECT …) – Во вторую: SELECT … FROM (SELECT …) – В третью: любые коррелированные подзапросы• Еще могут быть фичи – Улучшения в системе репликации – Что-то другое.
  • 36. MariaDB - выводы• Испытанные патчи и новые фичи собраны и выпущены в виде исходников и бинарников• MariaDB 5.1 – уже давно Stable• MariaDB 5.2 – Beta• Совместима с MySQL, можно – Использовать MySQL-клиенты – Мигрировать туда-обратно – Подключить MariaDB как replication slave – => легко попробовать.
  • 37. Ссылки• 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

×