Что такое MariaDB 5.3?
Дата | Релиз | Статус | Заметки к релизу | Лог изменений |
---|---|---|---|---|
30 Jan 2013 | MariaDB 5.3.12 | Стабильная сборка (GA) | Заметки к релизу | Лог изменений |
29 Nov 2012 | MariaDB 5.3.11 | Стабильная сборка (GA) | Заметки к релизу | Лог изменений |
13 Nov 2012 | MariaDB 5.3.10 | Стабильная сборка (GA) | Заметки к релизу | Лог изменений |
02 Oct 2012 | MariaDB 5.3.9 | Стабильная сборка (GA) | Заметки к релизу | Лог изменений |
28 Aug 2012 | MariaDB 5.3.8 | Стабильная сборка (GA) | Заметки к релизу | Лог изменений |
4 May 2012 | MariaDB 5.3.7 | Стабильная сборка (GA) | Заметки к релизу | Лог изменений |
9 Apr 2012 | MariaDB 5.3.6 | Стабильная сборка (GA) | Заметки к релизу | Лог изменений |
29 Feb 2012 | MariaDB 5.3.5 | Стабильная сборка (GA) | Заметки к релизу | Лог изменений |
15 Feb 2012 | MariaDB 5.3.4 | Релиз-кандидат | Заметки к релизу | Лог изменений |
21 Dec 2011 | MariaDB 5.3.3 | Релиз-кандидат | Заметки к релизу | Лог изменений |
14 Oct 2011 | MariaDB 5.3.2 | Бета-версия | Заметки к релизу | Лог изменений |
10 Sep 2011 | MariaDB 5.3.1 | Бета-версия | Заметки к релизу | Лог изменений |
26 July 2011 | MariaDB 5.3.0 | Бета-версия | Заметки к релизу | Лог изменений |
Contents
Главным фокусом развития MariaDB 5.3 остается увеличение производительности для подзапросов, таких как "JOIN" или одно-табличные запросы применяемые к большим наборам данных.
MariaDB 5.3 базируется на MariaDB 5.2, а она на MariaDB 5.1, которая основана на MySQL 5.1. Она больше находиться в активной разработке, и будет получать критические исправления безопасности только до Февраля 2017 года.
Некоторая часть кода была портирована из MySQL 6.0 (версия которая не была допущена к релизу как GA компанией Oracle), который был переработан и обогащен новыми возможностями, ну и конечно некоторая часть кода была написана с нуля.
Все новые возможности и их комбинации могут быть включены или выключены динамически через системную переменную "optimizer_switch"
Первый стабильный (GA) релиз MariaDB 5.3 был MariaDB 5.3.5, который был выпущен 29 Февраля 2012 года.
Вы можете скачать последнюю бинарную сборку MariaDB 5.3 тут, или получить последнюю версию исходного кода из Launchpad.
Сравнительные таблицы дополнений
Для оптимизаторов была создана таблица Сравнительная таблица дополнений-оптимизаторов показывающая что новые дополнения для оптимизации в MariaDB 5.5 и 5.3 подходят к MySQL 5.5 и 5.6.
Оптимизация запросов
Оптимизация подзапросов
Подзапросы окончательно вошли в нашу практику. Больше не требуется
переписывать подзапросы в ручную в "JOIN" или разделять запросы.
MariaDB 5.3 нацелен на обеспечение обоснованной обработки для всех типов подзапросов
Все возникшие проблемы с EXPLAIN
полученные в процессе уже были решены.
- Semi-join subquery optimizations
Оптимизатор трансформирует подзапросы в 'полу-join' запросы, это такие запросы похожие на 'inner join', тогда оптимизатор выбирает лучшую стратегию выполнения 'полу-join' запросов. Глобально процесс сходный с тем как выполняется join в MySQL, MariaDB и других базах данных. - Не "полу-join" оптимизация подзапросов
если подзапросы не "полу-join", MariaDB 5.3 сделает выбор с учетом затрат из двух стратегий:- Материализация для нескоррелированных подзапросов, при помощи стратегия эффективного выполнения NULL-подобных вычислений
- IN-to-EXISTS трансформация (только оптимизаторы унаследованные от MariaDB 5.2 and MySQL 5.1/5.5)
- Кэш подзапросов
Кэш подзапросов, позволяет подзапросам выполняться несколько раз за короткое время что увеличивает быстродействие уже оптимизированных подзапросов. - Подзапросы никогда не выполняются в процессе
EXPLAIN
, таким образом результат всегда практически мгновенныйEXPLAIN
. - DISTINCT и GROUP BY без использования HAVING оптимизированы для подзапросов.
Карта оптимизации подзапросов показывает новую схему оптимизации в графическом виде.
Оптимизация для доставки таблиц и представлений(запросов)
- No early materialization of derived tables (e.g. subqueries in a
FROM
clause) and materialized views (EXPLAIN
is always instantaneous) - Thanks to Derived Table Merge optimization, mergeable derived tables are now processed like mergeable VIEWs.
- Derived Table with Keys optimization gives the optimizer an option to create indexes over materialized derived tables
- Fields of merge-able views and derived tables are involved now in all optimizations employing equalities
Оптимизация доступа к диску
- Index Condition Pushdown
- Multi-Range-Read optimization (MRR)
- Key-ordered retrieval
Оптимизация 'Join' запросов
- Block-based Join Algorithms
- Block Nested Loop algorithm can be used for outer joins
- Block Hash Join (classic algorithm) is implemented and can be used for any equi-joins
- Block Index Join (Batch Key Access Join) is supported and can exploit the benefits of ordered retrievals for primary and secondary keys provided by the new implementation of MRR
- All block based algorithms for joins can use the benefits of new incremental join buffers
- All block based algorithms fully support outer joins including nested outer joins
- All block based algorithms can use the benefits of the first match optimization for semi-joins and the non-exist optimization for outer joins
- All block based algorithms for joins can exploit the benefits of index condition push-down.
- The total memory space used by the query for join buffers can be limited now, and block based algorithms can allocate join buffers up to their needs (not exceeding the set limits).
- Condition over outer tables extracted from ON expressions of outer joins are evaluated before inner tables are accessed (supported for both regular index join and block index join)
- Early checks for nulls for the fields from any null-rejecting conditions are performed
Index Merge improvements
- Correct optimization of index_merge vs range access: Fair choice between range and index_merge optimizations
- index_merge/sort_intersection strategy
Optimizer control
- @@optimizer_switch variable can be used to turn on/off all new optimizations.
NoSQL-style interfaces
- HandlerSocket plugin included.
- Faster HANDLER commands; HANDLER READ now also work with prepared statements.
- Dynamic Columns support.
Replication and binary logging
- Group commit for the binary log — MariaDB 5.3 implements group commit which works when using XtraDB with the binary log enabled. (In previous MariaDB releases, and all MySQL releases at the time of writing, group commit works in InnoDB/XtraDB when the binary log is disabled, but stops working when the binary log is enabled).
- Annotation of row-based replication events with the original SQL statement — When using row-based replication, the binary log does not contain SQL statements, only discrete single-row insert/update/delete events. This can make it harder to read mysqlbinlog output and understand where in an application a given event may have originated, complicating analysis and debugging.This feature adds an option to include the original SQL statement as a comment in the binary log (and shown in mysqlbinlog output) for row-based replication events.
- Checksums for binlog events. This is a backport of the same feature in MySQL 5.6. It was implemented in MWL#180.
- Enhancements for START TRANSACTION WITH CONSISTENT SNAPSHOT —
In MariaDB 5.3,
START TRANSACTION WITH CONSISTENT SNAPSHOT
now also works with the binary log. This means it is possible to obtain the binlog position corresponding to a transactional snapshot of the database without blocking any other queries. This is used by the command "mysqldump
--
single-transaction
" to do a fully non-blocking backup which can be used to provision a new slave. "--
master-dataSTART
TRANSACTION
WITH
CONSISTENT
SNAPSHOT
" now also works consistently between transactions involving more than one storage engine (currently XTraDB and PBXT support this). - Row-based replication for tables with no primary key —
This feature can improve the performance of row-based replication on tables
that do not have a primary key (or other unique key), but which do have
another index that can help locate rows to update or delete. With this
feature, index cardinality information from
ANALYZE TABLE
is considered when selecting the index to use (before this feature is implemented, the first index was selected unconditionally). mysqlbinlog
will now omit redundantuse
statements aroundBEGIN
,SAVEPOINT
,COMMIT
, andROLLBACK
events when reading MySQL 5.0 binlogs.
Типы данных
- микросекунды поддерживает NOW() и timestamp, time, и datetime столбцы.
- CAST() теперь поддерживает AS DECIMAL[(M,D)] и AS INT.
- CAST() и все другие.datetime/time функции теперь полностью поддерживают микросекунды.
Улучшения производительности в Windows
- Бэкпорт из Патчи для увеличения производительности в Windows из MySQL 5.5.
- Асинхронный IO в XtraDB теперь переработан и теперь работает быстрее, в связи с завершением IO-порта.
- Дополнительная устойчивость опций для XtraDB :
innodb_flush_method
теперь может бытьO_DSYNC
, прямо как в Unix. Эффект использования этой опции можно найти в лог-файле открываемом флагомFILE_FLAG_WRITETHROUGH
, иFlushFileBuffers()
теперь не работает(?). Это может ускорить выполнение тяжелых(в плане записи на диск) сценариев. - Новый Windows MSI-установшик.
- Включает GUI-tool для HeidiSQL.
Всякое разное
- GIS точные операции
- Новые переменные-статусы:
Rows_tmp_read
,Handler_tmp_write
, andHandler_tmp_update
которые считают что происходит во внутренних временных таблицах.- Rows_read
,
Handler_writeand
Handler_updateбольше не считают то что происходит во внутренних временных таблицах.
- Rows_read
- Новая переменная-статус
Handler_read_rnd_deleted
, которая показывает количество удаленных строк, найденных и пропущенных при сканировании таблицы. Раньше она была частьюHandler_read_rnd_next
. - Новая переменная 'in_transaction' которая '1' если транзакция, иначе '0'.
- Отчеты о прогрессе для
ALTER TABLE
иLOAD DATA INFILE
. В дополнение Aria-таблицы дают отчеты о прогрессе дляREPAIR TABLE
andCHECK TABLE
. Прогресс вы можете посмотреть вSHOW PROCESSLIST
,INFORMATION_SCHEMA.PROCESSLIST
и это можно переслать клиентам MariaDB которые вызвалиmysql_real_connect()
с новымCLIENT_PROGRESS
флагом.mysql
-клиент для командной строки теперь поддерживает новый индикатор прогресса. - PBXT-подобное последовательное наложение коммитов
— Эта возможность включает API новой службы хранения и наложения коммитов PBXT.
с этой службой стало возможным использование "
START TRANSACTION WITH CONSISTENT SNAPSHOT
" и управлять наложением среди транзакций которые вызваны через XtraDB и InnoDB. (Без этой возможности вы не имеете гарантии. Например после запуска "START TRANSACTION WITH CONSISTENT SNAPSHOT
" может получиться так что часть InnoDB/XtraDB транзакций T будет видна, а часть PBXT транзакций T нет.) - MariaDB уникальные номера ошибок теперь начинаются с
1900
чтобы не пересекаться с MySQL номерами ошибок. /*M!##### */
новый синтаксис выполняемых комментариев который может быть использован когда вы хотите использовать новый синтаксис MariaDB но хочется оставить программу совместимой с MySQL.- Оптимизированная версия MariaDB отсюда mytop включена в MariaDB дистрибутив.
- Расширен KILL синтаксис:
KILL [HARD | SOFT] [CONNECTION | QUERY] [thread_id | USER user_name]
max_user_connections
(обе, глобальная переменная иGRANT
опция) должна быть установлена в-1
чтобы запретить пользователям соединения с сервером. Глобальнаяmax_user_connections
переменная не влияет на пользователей сSUPER
привелегиями.- Директива IGNORE игнорирует не все ошибки (вроде fatal error), только то что можно безопасно игнорировать.
Вы можете получить доступ к дереву MariaDB 5.3 из launchpad.
Исправление уязвимостей безопасности в MariaDB 5.3
Для того чтобы увидеть весь список исправленных уязвимостей, за все версии MariaDB, гляньте эту Исправленные уязвимости безопасности в MariaDB страницу.
- CVE-2013-1531: MariaDB 5.3.12
- CVE-2013-0389: MariaDB 5.3.12
- CVE-2013-0385: MariaDB 5.3.12
- CVE-2013-0384: MariaDB 5.3.12
- CVE-2013-0383: MariaDB 5.3.12
- CVE-2013-0375: MariaDB 5.3.12
- CVE-2012-5627: MariaDB 5.3.12 [2]
- CVE-2012-5615: MariaDB 5.3.12 [2]
- CVE-2012-5612: MariaDB 5.3.12
- CVE-2012-5611: MariaDB 5.3.12, MariaDB 5.3.11
- CVE-2012-4414: MariaDB 5.3.8 [2]
- CVE-2012-1705: MariaDB 5.3.12
- CVE-2012-1702: MariaDB 5.3.12
- CVE-2012-0574: MariaDB 5.3.12
- CVE-2012-0572: MariaDB 5.3.12