お知らせ - 12系 — Mroonga vmrn_version documentation

本文へスキップ
`Ctrl`+`K`

# お知らせ - 12系

## 12.12リリース - 2023-01-29

### Improvements

- [AlmaLinux] AlmaLinux 9 を新しくサポートしました。

- [CentOS][AlmaLinux][Debian GNU/Linux][Ubuntu] MySQL 8.0.32をサポートしました。

- [CentOS][AlmaLinux][Debian GNU/Linux][Ubuntu] MySQL 5.7.41をサポートしました。

- 複合主キーを設定しているテーブルで通常のカラムの更新ができるようになりました。 [GitHub#592] [handmoundさんが報告]

  以下のようにMroongaストレージエンジンを使ったテーブルに複合主キーを設定しているときは、通常のカラムを更新できませんでした。

      CREATE TABLE scores (
        name char(30) NOT NULL,
        score int NOT NULL,
        PRIMARY KEY (name, score),
        note char(30),
        FULLTEXT INDEX search_note_idx (note)
      ) ENGINE = Mroonga DEFAULT CHARSET=utf8mb4;

      INSERT INTO scores (name, score) VALUES ("Taro Yamada", 29);

      UPDATE scores SET note = "Note"
        WHERE name = "Taro Yamada" AND score = 29;

      ERROR 1265 (01000): data truncated for primary key column: <name>

  このエラーはMariaDB向けMroongaでは発生しません。

### Thanks

- handmoundさん

## 12.11リリース - 2020-01-06

### Improvements

- [CentOS][AlmaLinux] 新しく、MariaDB 10.10をサポートしました。

- [Amazon Linux] MariaDB 10.5.10-2.amzn2.0.2をサポートしました。

- [サーバ変数の一覧] 新しいサーバーステータス変数 `libgroonga_support_mecab` を追加しました。

  これはGroongaがTokenMecabをサポートしている時のみtrueです。

- [Debian GNU/Linux] MariaDB 10.5.18をサポートしました。

### Fixes

- [mroonga_highlight_html()] `mroonga_highlight_html` を `AS query` と一緒に使った際にメモリーリークする問題を修正しました。

- Windows版MariaDB 10.9以降のMroongaを使った時にMeCabの初期化に失敗する問題を修正しました。

## 12.10リリース - 2022-11-29

### Improvements

- [CentOS][AlmaLinux] MariaDB 10.3.37、10.4.27、10.5.18、10.6.11、10.7.7、10.8.6、10.9.4をサポートしました。 [GitHub #564][Josep Sanzさんの報告][かとうさんがパッチ提供]

- [CentOS][AlmaLinux] Percona Server 8.0.30-22をサポートしました。

- [CentOS] Percona Server 5.7.40-43をサポートしました。

- [Windows] MariaDB 10.7、10.8、10.9をサポートしました。

- [Windows] 32bitバージョンのサポートをやめました。

  最近のMariaDBは32bitのWindowsでビルドできず、32bit向けの公式パッケージも存在しないためです。

- [mroonga_highlight_html()] 新しいパラメータ `open_tag` と `close_tag` を追加しました。 [GitHub #537][ishitakaさんによる報告]

  ハイライトに使うタグを `open_tag` と `close_tag` で指定できるようになりました。

  今までは固定で `<span class="keyword">...</span>` というタグを使用しており、 `class` の変更や、別のタグが指定できず不便でした。今回からタグを指定できるようになったので、 `<mark>...</mark>` などのハイライト用のタグも使えるようになって便利になりました。

      SELECT mroonga_highlight_html('Mroonga is the Groonga based storage engine.', 'groonga',
                                    '<mark>' AS open_tag, '</mark>' AS close_tag) AS highlighted;

      -- +-----------------------------------------------------------+
      -- | highlighted                                               |
      -- +-----------------------------------------------------------+
      -- | Mroonga is the <mark>Groonga</mark> based storage engine. |
      -- +-----------------------------------------------------------+

  詳細は mroonga_highlight_html() を参照してください。

- 参照カウントモードをサポートしました。

  この機能によりメモリー使用量を一定量に保つことができますが、パフォーマンスが悪化します。そのため、メモリー不足の場合には、この機能を使用する前に、メモリーを増強することを検討してください。

  参照カウントモードは MySQLの table_open_cache とともに使用します。

  MySQLは `table_open_cache` で指定した個数のテーブルをキャッシュしておくことができます。キャッシュされているテーブルはまだ使用中なので、Groongaのオブジェクトも解放されません。

  `table_open_cache` で指定した個数よりも多いテーブルが開かれたとき、使用頻度が低いテーブルが閉じられます。参照カウントモードが有効なとき、そのタイミングでGroongaのオブジェクトも閉じられます。

  このようにして参照カウントモードではメモリー使用量を一定に保っています。

  実際に使用する際には、ステータス変数の Open_tables の値とメモリー使用量を見ながら `table_open_cache` の値を調整することで、メモリー使用量とパフォーマンスのバランスを調整する必要があります。なぜなら、この機能はメモリー使用量を一定に保ちますが、その分パフォーマンスが悪化するためです。

  `Open_tables` の確認方法は以下の通りです。

      SHOW GLOBAL STATUS LIKE 'Open_tables';
      -- +---------------+-------+
      -- | Variable_name | Value |
      -- +---------------+-------+
      -- | Open_tables   | 643   |
      -- +---------------+-------+

  通常は `Open_tables` より `table_open_cache` を大きくして常に使っているすべてテーブルをキャッシュします。しかし、メモリーに余裕がない環境では一部の使用頻度の低いテーブルをキャッシュから落として解放することでメモリー使用量を削減します。使用頻度の低いテーブルをキャッシュから落とすには `Open_tables` より `table_open_cache` を小さくします。`table_open_cache` を小さくすればするほど、より多くのテーブルがキャッシュから落ちます。その分メモリー使用量は減りますが、テーブルの開き直しが必要になるためパフォーマンスは悪化します。`table_open_cache` を小さくすればするほど、パフォーマンスが悪化するので、小さくするのはメモリー使用量が許容範囲内に収まる程度までにしておきます。

  参照カウントモードを有効にするには、my.cnfに以下の値を設定します。

      loose-mroonga-enable-reference-count = ON

  注釈

  MySQL起動後に変数で指定しても参照カウントモードは有効になりません。my.cnfで指定してください。

      SET GLOBAL mroonga_enable_reference_count = ON

### Fixes

- Windows版のMroongaに groonga-normalizer-mysql をバンドルしていなかった問題を修正しました。

  Mroonga 12.09 にて groonga-normalizer-mysql をバンドルするよう修正したとアナウンスしましたが、修正されていませんでした。

### Thanks

- Josep Sanz

- Tomohiro KATO

- ishitakaさん

## 12.09リリース - 2022-10-28

### Improvements

- [CentOS][AlmaLinux] MariaDB 10.9.3をサポートしました。

- [CentOS][Ubuntu] MySQL 5.7.40をサポートしました。

- [CentOS][AlmaLinux][Debian GNU/Linux][Ubuntu] MySQL 8.0.31をサポートしました。

- [Ubuntu] Ubuntu 22.04 (Jammy Jellyfish) の MariaDB 10.6 をサポートしました。

- クエリーのタイムアウトパラメータをサポートしました。 [GitHub #344] [かずひこさんが報告]

  MySQL/MariaDB はクエリーの実行時間がタイムアウトパラメータで指定した時間を超過した場合、クエリーを中断することができます。タイムアウトパラメータは、MySQL では `MAX_EXECUTION_TIME` 、MariaDBでは `max_statement_time` です。

  しかし、MySQL/MariaDBがクエリーを中断し結果を返した後も、Mroongaは実行中のクエリーを中断していませんでした。そのため、クエリーが大量に結果にマッチする場合には、MySQL/MariaDBがクエリーを中断した後もメモリやCPUのリソースを消費し続けていました。

  本バージョンから、Mroongaは指定された時間でクエリーを中断できるようになり、タイムアウトパラメータが正しく動作するようになりました。そのため、クエリーを中断した後もメモリやCPUリソースを消費し続ける問題も発生しなくなりました。

  この機能の使い方は以下の通りです。

  以下はMySQLの場合の例です。

      CREATE TABLE diaries(
        title TEXT
        FULLTEXT INDEX (title)
      ) ENGINE = Mroonga DEFAULT CHARSET=utf8mb4;

      INSERT INTO diaries (title) VALUES ("It'll be fine tomorrow.");
      INSERT INTO diaries (title) VALUES ("It'll rain tomorrow");

      SELECT /*+ MAX_EXECUTION_TIME(1) */ title
        FROM diaries
       WHERE MATCH(title) AGAINST("+fine" IN BOOLEAN MODE);

  以下はMariaDBの場合の例です。

      CREATE TABLE diaries(
        title TEXT
        FULLTEXT INDEX (title)
      ) ENGINE = Mroonga DEFAULT CHARSET=utf8mb4;

      INSERT INTO diaries (title) VALUES ("It'll be fine tomorrow.");
      INSERT INTO diaries (title) VALUES ("It'll rain tomorrow");

      SET STATEMENT max_statement_time = 0.001 FOR
      SELECT title
        FROM diaries
       WHERE MATCH(title) AGAINST("+fine" IN BOOLEAN MODE);

  この機能は、 `mroonga_command()` でも使えます。

### Fixes

- Windows版のMroongaに groonga-normalizer-mysql をバンドルしていなかった問題を修正しました。

  このバグは、 Mroonga 12.02から存在していました。したがって、Windows版のMroonga 12.02 から 12.08 では groonga-normalizer-mysql を使えません。

### Thanks

- Kazuhiko

## 12.08リリース - 2022-10-03

- [CentOS][AlmaLinux] MariaDB 10.6.10, 10.7.6, 10.8.5をサポートしました。

- [Oracle Linux] MySQL 8.0.30をサポートしました。

## 12.07リリース - 2022-08-30

### Improvements

- [CentOS][AlmaLinux] MariaDB 10.3.36、10.4.26、10.5.17、10.6.9、10.7.5、10.8.4をサポートしました。

- [CentOS][AlmaLinux] Percona Server 5.7.39-42をサポートしました。

- [CentOS][AlmaLinux] Percona Server 8.0.29-21をサポートしました。

  注釈

  Percona Server 8.0.29で使用しているMySQL 8.0.29には重大な問題があります。そのため、このバージョンの使用は推奨しません。

  問題に関する詳細は、 MySQL 8.0.29 リリースノート を参照してください。

### Fixes

- install.sqlを使用したインストールおよびアップグレードに失敗する問題を修正しました。[GitHub #525][Tomohiro KATOさんの報告][Jérome Perrinさんがパッチ提供]

  install.sqlが壊れていたことが原因です。この問題は、 Mroonga 12.06以降で発生していました。

- MySQL 8.0 以上を使用しているとき、`mroonga_command()` が16進数ダンプで結果を返す問題を修正しました。

  このバージョンから、`mroonga_command()` が正しい文字コードで結果を返すようになります。

- [AlmaLinux] AlmaLinux 8 向けMroongaのインストール手順を修正しました。[Gitter/ja:62fe4ca5b16e8236e3ef225c][handmoundさんの報告]

### Thanks

- handmoundさん

- Jérome Perrinさん

- Tomohiro KATO

## 12.06リリース - 2022-08-04

### Improvements

- [CentOS] MySQL 5.7.39をサポートしました。

- [CentOS][AlmaLinux] MySQL 8.0.30をサポートしました。

- [CentOS][AlmaLinux] Percona Server 8.0.28-20をサポートしました。

- [CentOS][AlmaLinux] MariaDB 10.8をサポートしました。

- [CentOS][AlmaLinux] MariaDB 10.2のサポートをやめました。

- [Debian GNU/Linux] Debian 10 (buster)のサポートをやめました。

- MroongaをMySQLに登録する際に、update.sql を実行する必要がないように変更しました。[GitHub #509][Jérome Perrin さんの報告]

  Mroonga 12.04から、MroongaをMySQLに登録するには、install.sqlとupdate.sqlの両方を実行する必要がありました。

      % mysql -u root < /usr/share/mroonga/install.sql
      % mysql -u root < /usr/share/mroonga/update.sql

  この改善では、Mroonga 12.04 より前と同じように、install.sqlを実行するだけで良いように変更しています。

      % mysql -u root < /usr/share/mroonga/install.sql

### Thanks

- Jérome Perrinさん

## 12.04リリース - 2022-06-01

### Improvements

- [サーバ変数の一覧] 新しいサーバー変数 `Mroonga_memory_map_size` を追加しました。

  以下のように、Mroongaのメモリーマップサイズの合計を取得できます。

      mysql> SHOW STATUS LIKE 'Mroonga_memory_map_size';
      +-------------------------+----------+
      | Variable_name           | Value    |
      +-------------------------+----------+
      | Mroonga_memory_map_size | 83406848 |
      +-------------------------+----------+
      1 row in set (0.00 sec)

  Windowsでは、Mroogaが物理メモリーとスワップ領域を使い果たした場合、それ以上メモリーをマップすることができません。そのため、この値を監視することで、メモリーが十分でない環境でもメモリーマップサイズを適切にコントロールできます。

- [CentOS][AlmaLinux] Percona Server 8.0.28-19をサポートしました。

- [CentOS][AlmaLinux] Percona Server 5.7.38-41をサポートしました。

- [CentOS][AlmaLinux] MariaDB 10.2.44, 10.3.35、10.4.25、10.5.16、10.6.8、10.7.4をサポートしました。

### Fixes

- Mroongaのアップデートに失敗することがある問題を修正しました。 [groonga-dev,04982, groonga-dev,04987][Mitsuo YoshidaさんとOHTSUKA Soushiさんの報告]

  この問題が発生した場合、"apt update"等でMroongaを更新した後、Mroongaが無効になります。その場合、以下の手順でMroongaを手動でインストールしてください。

      % mysql -u root < /usr/share/mroonga/install.sql

### Thanks

- Mitsuo Yoshidaさん

- OHTSUKA Soushiさん

## 12.03リリース - 2022-05-06

### Improvements

- [CentOS] Percona Server 5.7.37-40をサポートしました。

- [CentOS] MySQL 5.7.38をサポートしました。

- [CentOS][AlmaLinux] MySQL 8.0.29をサポートしました。

### Fixes

- MariaDB 10.5.14 上でMroongaがインデックスの作成に失敗することがある問題を修正しました。 [GitHub clear-code/redmine_full_text_search#103][wateさんの報告]

- 全文検索でメモリーリークする問題を修正しました。[OHTSUKA SoushiさんとMitsuo Yoshidaさんの報告]

  この問題は、 order limit　の最適化 が使われた時に発生します。ただし、MariaDBを使っている場合はこの最適化を使っていなくても発生します。

  この問題は、 Mroonga 11.03以降で発生していました。

### Thanks

- wateさん

- OHTSUKA Soushiさん

- Mitsuo Yoshidaさん

## 12.02リリース - 2022-03-29

### Improvements

- MySQL 8.0以降でラッパーモードのサポートをやめました。

- サーバー変数を使って、バックトレースを無効にできるようになりました。

  "SET GLOBAL mroonga_enable_back_trace = false;" とすることで、バックトレースを無効にできます。

- 重み付きベクターの重みに `float32` 型を追加しました。

  `float32` で重みを格納できます。この機能を使うには、カラムを定義する時に `WEIGHT_FLOAT32` フラグを追加する必要があります。

- [CentOS][AlmaLinux] MariaDB 10.3.34、10.4.24、10.5.15、10.6.7、10.7.3をサポートしました。

- [CentOS] MariaDB 10.2.43をサポートしました。

- [CentOS][AlmaLinux] Percona Server 8.0.27-18をサポートしました。

- `MISSING_*` と `INVALID_*` フラグをサポートしました。

  これらのフラグの詳細は、 https://groonga.org/ja/docs/news.html#release-12-0-2 を参照してください。

## 12.00リリース - 2022-02-09

メジャーバージョンアップです! メジャーバージョンアップですが、互換性は壊れていないので、データベースを再構築することなく12.00へアップグレードできます。

まずはじめに、Mroonga 11.00から11.13までの変更点を紹介します。次に、12.00の主な変更点を紹介します。

## Mroonga 11.00から 11.13までの主な変更点

### 新規機能と改良

- Renamed package names as below.

  - `mariadb-server-10.x-mroonga` -> `mariadb-10.x-mroonga`

  - `mysql-server-5.x-mroonga` -> `mysql-community-5.x-mroonga`

  - `mysql-server-8.x-mroonga` -> `mysql-community-8.x-mroonga`

  - `percona-server-5x-mroonga` -> `percona-server-5.x-mroonga`

  - `percona-server-8x-mroonga` -> `percona-server-8.x-mroonga`

  警告

  パッケージ名を変更しています。この変更の影響でこのバージョンにアップグレード後、Mroongaが無効になることがあります。このバージョンにアップグレードする場合、以下の点を必ず確認してください。

  If Mroonga is invalid after the upgrade, we need to install manually Mroonga again. Please refer to the following URL about the manual installation of Mroonga and how to confirming whether Mroonga is valid or not.

  > - https://mroonga.org/docs/tutorial/installation_check.html

  Mroonga 11.03をまたいでMroongaをアップグレードする場合は、この現象が発生するので、注意してください。

  If Mroonga is valid after upgrade to this version but, Mroonga's version is old, we need to restart MySQL, MariaDB, or PerconaServer. We can confirm Mroonga's version as the below command.

  > - `SHOW VARIABLES LIKE 'mroonga_version';`

- [mroonga_snippet_html()] `mroonga_snippet_html()` でカスタマイズしたノーマライザーをサポートしました。

  - We can use custom normalizer in `mroonga_snippet_html()` by this feature as below.

        CREATE TABLE terms (
          term VARCHAR(64) NOT NULL PRIMARY KEY
        ) COMMENT='normalizer "NormalizerNFKC130(''unify_kana'', true)"'
          DEFAULT CHARSET=utf8mb4
          COLLATE=utf8mb4_unicode_ci;

        SELECT mroonga_snippet_html('これはMroonga（ムルンガ）です。',
                                    'terms' as lexicon_name,
                                    'むるんが') as snippet;

        snippet
        <div class="snippet">これはMroonga（<span class="keyword">ムルンガ</span>）です。</div>

- [サーバ変数の一覧] We disabled `mroonga_enable_operations_recording` by default.

  `mroonga_enable_operations_recording` to determine whether recording operations for auto recovering are enabled or not.

  This recording of operations is for auto recovering Mroonga when it crashed. Normally, if lock remain in Mroonga, we can't execute INSERT/DELETE/UPDATE, but if `mroonga_enable_operations_recording` is enable, we may not execute SELECT at times in addition to INSERT/DELETE/UPDATE. Because auto recovery is sometimes blocked by residual lock when they crashed.

  Therefore, we set `OFF` to the default value in this version. By we disable operation recording, INSERT/DELETE/UPDATE is blocked as usual because of the residual lock, but "SELECT" may bework.

  An appropriate way to handle to residual lock is as follows.

  > - https://www.clear-code.com/blog/2021/6/1/mroonga-recover-lock-failed-2021.html (Japanese only)

### Fixes

- MySQL/MariaDBのアップグレード後にクラッシュすることがある問題を修正しました。

  - Mronnga may crash if we execute `SELECT ... MATCH AGAINST` after MySQL/MariaDB upgrade.

- WHERE句に "WHERE primary_key IN ("")" と指定した際にMroongaが誤ったレコードを返すことがある問題を修正しました。

  詳細は、 release 11.07 を参照してください。

- [最適化] Mroongaが行カウントの最適化を誤って適用する問題を修正しました。

  詳細は、 release 11.10 を参照してください。

- Fixed a bug that Mroonga crashed when we upgrade DB created by MySQL 5.7 to MySQL 8.0.

- Fixed a bug that latitude and longitude are stored conversely.

  警告

  backward compatibility is broken by this fix.

  Users that are using `GEOMETRY` type need to store the current data before upgrading to Mroonga 11.03 and restore the stored data after upgrading to Mroonga 11.03. Users can use the following methods for dumping/restoring data.

  > - `mysqldump`

  > - Execute `ALTER TABLE ENGINE=InnoDB` before upgrading and execute `ALTER TABLE ENGINE=Mroonga` after upgrading.

  If without this fix, `INSERT/UPDATE/SELECT/SELECT` works well but data stored in Groonga are wrong (Latitude and longitude are swapped in Groonga). Therefore, `mroonga_command('select ...')` doesn't work for spatial data.

- 外部キー制約が登録されない問題を修正しました。

  This bug had only occurred on MySQL 8.0.

  詳細は、 release 11.01 を参照してください。

- 対象のデータベースに外部キー制約があると、 `DROP DATABASE` に失敗する問題を修正しました。

  詳細は、 release 11.01 を参照してください。

- 対象のテーブルが別のテーブルから参照されていると、 `DROP COLUMN` に失敗する問題を修正しました。

  詳細は、 release 11.01 を参照してください。

- MariaDBのMroongaでアップデートに失敗する問題を修正しました。

### 新しくサポートしたOS

- [Debian GNU/Linux] Added support for Debian 11 (bullseye).

- [AlmaLinux] Added support for Mroonga on AlamLinux 8.

### サポートをやめたOS

- [CentOS] Dropped support for CentOS 8.

- [Ubuntu] Dropped Ubuntu 21.04 (Hirsute Hippo) support.

- [Ubuntu] Dropped Ubuntu 20.10 (Groovy Gorilla) support.

- [Ubuntu] Ubuntu 16.04 LTS (Xenial Xerus)のサポートをやめました。

- [Ubuntu] Ubuntu 18.04 LTSのMariaDB 10.1のサポートをやめました。

### Thanks

- shibanao4870

- Marc Laporte

- santalex

- Josep Sanz

- Tomohiro KATO

- Katsuhito Watanabe

- kenichi arimoto

- Vincent Pelletier

- Kosuke Yamashita

- ひじー

12.00の主な変更点は以下の通りです。

### Improvements

- [Ubuntu] Ubuntuの mysql-server パッケージの最新バージョンをサポートしました。

  以下のバージョンをサポートしました。

  - Ubuntu 18.04 LTS (bionic) mysql-server (5.7.37-0ubuntu0.18.04.1)

  - Ubuntu 20.04 LTS (focal) mysql-server (8.0.28-0ubuntu0.20.04.3)

  - Ubuntu 21.10 LTS (impish) mysql-server (8.0.28-0ubuntu0.21.10.3)

- [CentOS] MariaDB 10.2.42、10.3.33、10.4.23、10.5.14、10.6.6をサポートしました。

- [AlmaLinux] MariaDB 10.3.33、10.4.23、10.5.14、10.6.6をサポートしました。