MariaDB10.8.3が2022年5月にGAになりました。
https://mariadb.com/kb/en/mariadb-1083-release-notes/
10.7のときに見落としていたのですが、
10.7も10.8もshort term supportのようで、
サポート期間はリリースから1年のようです。
直近では、10.6がLTSという扱いのようです。
機能概要は以下のとおりです。
https://mariadb.com/kb/en/changes-improvements-in-mariadb-108/
個人的に気になった点だけ挙げておきます。
(LAG free ALTER)
レプリケーションをしていると、ALTER TABLEはまずプライマリ(マスター)で実行され、
完了してはじめて、レプリカ(スレーブ)に伝播するというものでした。
そのため、大きなテーブルでALTERを実行すると、レプリカの遅延が激しくなっていました。
(プライマリでALTER開始〜完了)→レプリケーション→(レプリカでALTER開始〜完了)
って感じが従来の流れですね。
で、今回の機能により、
(プライマリでALTER開始)→レプリケーション→(レプリカでALTER開始)→(プライマリ・レプリカでALTER完了)
って感じになるため、レプリカ遅延、つまりラグがおきにくいですよ、って話かと。
昔MySQLで巨大なテーブルにALTERしたら、マスターで2時間、スレーブで2時間、
合計4時間とかになったことがあったので、
これが合わせて2時間で終わる感じになるので、とても素敵な機能かと思います。
(JSON Histgrams)
histgramの結果を格納しているmysql.column_statsテーブルが変更になりました。
10.4
> desc mysql.column_stats;
+---------------+-----------------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+-----------------------------------------+------+-----+---------+-------+
| db_name | varchar(64) | NO | PRI | NULL | |
| table_name | varchar(64) | NO | PRI | NULL | |
| column_name | varchar(64) | NO | PRI | NULL | |
| min_value | varbinary(255) | YES | | NULL | |
| max_value | varbinary(255) | YES | | NULL | |
| nulls_ratio | decimal(12,4) | YES | | NULL | |
| avg_length | decimal(12,4) | YES | | NULL | |
| avg_frequency | decimal(12,4) | YES | | NULL | |
| hist_size | tinyint(3) unsigned | YES | | NULL | |
| hist_type | enum('SINGLE_PREC_HB','DOUBLE_PREC_HB') | YES | | NULL | |
| histogram | varbinary(255) | YES | | NULL | |
+---------------+-----------------------------------------+------+-----+---------+-------+
10.8
> desc mysql.column_stats;
+---------------+---------------------------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+---------------------------------------------------+------+-----+---------+-------+
| db_name | varchar(64) | NO | PRI | NULL | |
| table_name | varchar(64) | NO | PRI | NULL | |
| column_name | varchar(64) | NO | PRI | NULL | |
| min_value | varbinary(255) | YES | | NULL | |
| max_value | varbinary(255) | YES | | NULL | |
| nulls_ratio | decimal(12,4) | YES | | NULL | |
| avg_length | decimal(12,4) | YES | | NULL | |
| avg_frequency | decimal(12,4) | YES | | NULL | |
| hist_size | tinyint(3) unsigned | YES | | NULL | |
| hist_type | enum('SINGLE_PREC_HB','DOUBLE_PREC_HB','JSON_HB') | YES | | NULL | |
| histogram | longblob | YES | | NULL | |
+---------------+---------------------------------------------------+------+-----+---------+-------+
hist_typeに「JSON_HB」というものが増えてます。
これにより、「histgram」カラムの値に、JSONとして結果を格納することができるようになります。
で、hist_typeのデフォルトは、「DOUBLE_PREC_HB」のようなので、
「JSON_HB」を使うには以下のようにするようです。
MariaDB [test]> select @@histogram_type;
+------------------+
| @@histogram_type |
+------------------+
| DOUBLE_PREC_HB |
+------------------+
1 row in set (0.001 sec)
MariaDB [test]> set histogram_type = 'JSON_HB';
Query OK, 0 rows affected (0.001 sec)
MariaDB [test]> select @@histogram_type;
+------------------+
| @@histogram_type |
+------------------+
| JSON_HB |
+------------------+
1 row in set (0.000 sec)
MariaDB [test]> analyze table user persistent for all;
:
(省略)
そうすると、mysql.column_statsのhistgramカラムにJSONが入るようになります。
長いので一部にしますが、以下のようなJSONが取得入るかと。
MariaDB [test]> select * from mysql.column_stats;
:
{
"target_histogram_size": 254,
"collected_at": "2022-06-17 23:23:19",
"collected_by": "10.8.3-MariaDB-log",
"histogram_hb": [
{
"start": "1",
"size": 0.00394246,
"ndv": 689
},
{
"start": "2047",
"size": 0.00394246,
"ndv": 689
},
:
(省略)
なにかに使えるかもしれない。。
(Spider Storage Engine Improvements)
Spider Engineは10.4でプラグイン化しました。
https://mariadb.com/kb/en/spider-installation/
で、今まではSpider用の設定がコメントであったのですが、
これを、以下の3つのシステム変数として定義できるようになったみたいです。
- REMOTE_SERVER
- REMOTE_DATABASE
- REMOTE_TABLE
従来のようにコメントでもできるようです。
これは後日試してみようかと。
(mysqlbinlog GTID support)
「–start-position」と「–stop-position」にGTIDが指定できるようになったようです。
これは嬉しい。
今まで「binlog_gtid_pos」関数使って、ファイルとポジションからGTIDを確認してましたが、
わざわざそんなことをしなくていいとなると、細かいようですが、かなりいいかなと。
ちなみに、MariaDBはGTIDを使ってレプリケーションを組むと、crash safeです。
ファイルとポジションはcrash unsafeです。
MySQLでは、
relay_log_info_repository = table
とすることで、crash safeにしていたかと。(MySQL8で、この辺もInnoDBになったはず)
という感じですかね。
Spiderとmariadb-binlog(mysql-binlog)は、後日検証しようかと思います。
また、私が作っているmagentadeskも、v0.4.5で10.8に対応しました。
https://github.com/shigenobu/magentadesk
以上