お知らせ - 12系

12.12リリース - 2023-01-29

改良

  • [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では発生しません。

感謝

  • handmoundさん

12.11リリース - 2020-01-06

改良

  • [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をサポートしました。

修正

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

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

12.10リリース - 2022-11-29

改良

  • [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_tagclose_tag を追加しました。 [GitHub #537][ishitakaさんによる報告]

    ハイライトに使うタグを open_tagclose_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
    

修正

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

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

感謝

  • Josep Sanzさん

  • かとうさん

  • ishitakaさん

12.09リリース - 2022-10-28

改良

  • [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() でも使えます。

修正

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

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

感謝

  • かずひこさん

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

改良

  • [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 リリースノート を参照してください。

修正

  • 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さんの報告]

感謝

  • handmoundさん

  • Jérome Perrinさん

  • かとうさん

12.06リリース - 2022-08-04

改良

  • [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
    

感謝

  • Jérome Perrinさん

12.04リリース - 2022-06-01

改良

  • [サーバ変数の一覧] 新しいサーバー変数 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をサポートしました。

修正

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

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

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

感謝

  • Mitsuo Yoshidaさん

  • OHTSUKA Soushiさん

12.03リリース - 2022-05-06

改良

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

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

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

修正

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

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

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

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

感謝

  • wateさん

  • OHTSUKA Soushiさん

  • Mitsuo Yoshidaさん

12.02リリース - 2022-03-29

改良

  • 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までの主な変更点

新規機能と改良

  • 以下のようにパッケージ名を変更しました。

    • 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が無効になることがあります。このバージョンにアップグレードする場合、以下の点を必ず確認してください。

    アップグレード後にMroongaが無効だった場合は、Mroongaを手動でインストールし直す必要があります。Mroongaの手動インストール及び、Mroongaが有効かどうかの確認については、以下のURLを参照してください。

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

    このバージョンにアップグレード後に、Mroongaは有効だがバージョンが古いという場合は、MySQL、MariaDB、PerconaServerを再起動する必要があります。Mroongaのバージョンは以下のコマンドで確認できます。

    • SHOW VARIABLES LIKE 'mroonga_version';

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

    • この機能によって、以下のように mroonga_snippet_html() でカスタマイズしたノーマライザーを使えます。

      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>
      
  • [サーバ変数の一覧] mroonga_enable_operations_recording をデフォルトで無効にしました。

    mroonga_enable_operations_recording 自動リカバリーのために操作の記録を有効にするかどうかを決めるものです。

    この操作記録はMroongaがクラッシュしたときに自動的にリカバリーするためのものです。通常、Mroonga内にロックが残留している場合、INSERT/DELETE/UPDATEは実行できませんが、 mroonga_enable_operations_recording が有効な場合、INSERT/DELETE/UPDATEに加えてSELECTも実行出来ないことがあります。自動リカバリーがロックの残留によって、ブロックされるためです。

    したがって、このバージョンから、デフォルト値を OFF にしました。ISERT/DELETE/UPDATE は、ロックの残留によって変わらずブロックされますが、操作記録を無効にすることで、SELECTは動作する可能性があります。

    残留したロックに対する正しい対処は以下の通りです。

修正

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

    • MySQL/MariaDB をアップグレード後に、 SELECT ... MATCH AGAINST を実行するとMroongaがクラッシュすることがあります。

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

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

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

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

  • MySQL 5.7で作成されたDBをMySQL 8.0にアップグレードすると、Mroongaがクラッシュする問題を修正しました。

  • 緯度と経度を逆に保存していた問題を修正しました。

    警告

    この修正によって、後方互換性が壊れます。

    GEOMETRY 型を使用しているユーザーは、Mroonga 11.03にアップグレードする前に現在のデータを保存し、アップグレード後に保存したデータをリストアする必要があります。 データのダンプ/リストアには、以下の方法が使えます。

    • mysqldump

    • アップグレード前に ALTER TABLE ENGINE=InnoDB を実行し、アップグレード後に ALTER TABLE ENGINE=Mroonga を実行する。

    この修正を適用しない場合、 INSERT/UPDATE/SELECT/SELECT はうまく動作しますが、データはGroongaが誤った(緯度と経度はGroonga内で逆にされます)保存をします。そのため、 空間データに対する、 mroonga_command('select ...') は動作しません。

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

    この問題は MySQL8.0 でのみ発生します。

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

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

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

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

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

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

新しくサポートしたOS

  • [Debian GNU/Linux] Debian 11 (bullseye)をサポートしました。

  • [AlmaLinux] AlmaLinux 8 をサポートしました。

サポートをやめたOS

  • [CentOS] CentOS 8のサポートをやめました。

  • [Ubuntu] Ubuntu 21.04 (Hirsute Hippo) のサポートをやめました。

  • [Ubuntu] Ubuntu 20.10 (Groovy Gorilla) のサポートをやめました。

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

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

感謝

  • shibanao4870さん

  • Marc Laporteさん

  • santalexさん

  • Josep Sanzさん

  • かとうさん

  • Katsuhito Watanabeさん

  • kenichi arimotoさん

  • Vincent Pelletierさん

  • Kosuke Yamashitaさん

  • ひじーさん

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

改良

  • [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をサポートしました。