MemSQL7.1が登場!!

#MemSQLがバージョン7.1になった・・・
Equalumの検証で一時中断しているMemSQLを弄ってみる作業ですが、案の定一連の足踏みをしている最中に、バージョンが７．１になっていました・・（汗）今回はこの７.１に関する概要と、以前のバージョンからのアップグレード検証を簡単に実施してみたいと思います。

注：もしも既に6.0以前を使われている場合は、7.1にアップグレードする際の注意点として、事前作業としてバージョン6の最終版である、MemSQL 6.8にアップグレードしておくようにしてください。また、各種の設定（仮想・物理問わずにクラスター構成やシングル構成でつかわれている場合は、MemSQL社が公式にWeb掲載している「アップグレード作業に関する留意事項と必要作業（主に設定や既存データ移行関連）」を忘れずに行う様にしてください。

公式のサポート等は有りませんが、MemSQL社からのFree版提供は継続していますので、ご興味が有れば此処からどうぞ・・

[**MmemSQLのFree版利用登録はここから・・・**](https://www.memsql.com/free/)


##まずは概要から・・
MemSQL社によれば、このバージョンでの大きな進化としては
（１）カラムストアの取り扱い
（２）高可用性の向上
（３）障害復旧時におけるOLTPスタイル・クエリのサポート拡大
が施されているとの事です。
また、今回のバージョンからGoogle Cloud Storage（GCS）パイプラインをサポートしていますので、この接続を利用されたい方には朗報だと思います。

####カラムストアの取り扱い
今回のコンセプトで非常に重要なポイントになるのは、「Single Store」と言うメッセージになります。
これは、列ストアの取り扱いを拡張して、トランザクション・サークロードを、より効率的に実施出来る様になった事を意味しています。また、この一連の強化により、カラムストアでの単一カラムにおける一意なハッシュキーのサポートと高速Joinのサポートが行える様になりました。
さらに、SQL内で使用できるINTOオプションをSELECTコマンドに追加した事により、SQL内においてSELECT INTOを使用した場合に、１行の結果セットのカラムを選択して変数のリストが作成出来る様になるので、今までよりも格段にSQLコードが簡潔になります。

####高可用性と災害復旧
レプリケーション中にプライマリクラスターに障害が発生した場合、セカンダリクラスターからプライマリクラスターへのレプリケーションをリバースして、プライマリクラスターにすばやくフェールバックさせる事が可能であり、高可用性のモード設定で利用している場合には、MemSQLのエンジンのload_balanced設定変数である「leaf_failover_fanout」を使うことにより、リーフノードのスレーブパーティションをクラスター内の関連リーフに対して、均等に分散配置出来るようになりました。また、この機能を使う事により、リーフ障害時のフェイルオーバー処理に関する作業負荷を分散させる事が出来るので、今まで以上に可用性と復旧性を向上させる事が可能になりました。

今回のバージョンアップに関するポイントは、ある意味「地味な」部分に見えるかもしれませんが、現実的にMemSQLを「より深く活用する場合」には、データベースとしても基本機能（SQL処理とかI/O性能ではない部分）の領域において非常に重要かつ大きな進化だと言えるでしょう。

###性能優先から「それだけではない」「普通の高性能」データベースへ・・・

これが、もしかしたら大きなメッセージなのかもしれません。

##このリリースで追加・改善された部分・・・
####データストレージ関連
（１）今回、パーティション分割機能がBACKUPコマンドのオプションとして実装され、データベース内のパーティション数を2倍にする作業が容易になりました。2倍という括りがポイントではありますが、この機能を上手く適用する事により、日常の作業がシンプルになるかと思います。また、この作業を行う場合は、リーフ増設等による分散並列処理の効率化のケースが多いと思いますので、より多くの並列処理を可能に出来るこの機能追加は、スケールアウト化できる普通のSQL-RDBにおけるパーティション数追加という部分で、非常に重要で有効な機能向上だとも言えるでしょう。

（２）今回のバージョンから、GCS、S3、Azureへの増分バックアップのサポートも追加ています。各詳細については、相手側との絡みも有りますので、MemSQL社が公式に出している、[Backing Up and Restoring Data](https://docs.memsql.com/v7.1/guides/cluster-management/operations/backing-up-and-restoring-data/)を参照にしてください。

この機能を使う事で、ハイブリッド展開に対して「より柔軟な発想」が可能になると思いますので、AI/BI向けの活用型DBだけではない「よりコアに近い領域での活用」に対して、普通に採用検討可能になってきたと言えるでしょう。

（３）通常の一時テーブルに加えて、グローバルな一時テーブルを追加（クライアントセッション期間内）

メモリは有る意味有限な資源でありコスト高でもあるので、MemSQL特有の一時テーブル設定は、非常に有効な性能維持のためのテクニックになります。今回の拡張でグローバル対応の設定も可能になったとの事なので、より柔軟なテーブル戦略の採用が可能になったと言えるかもしれません。

（４）テーブルの作成時や、行を挿入または更新するときに、DATETIMEまたはDATETIME(6)カラムに対して現在のタイムスタンプを取り込むように指定可能になった。

（５）カラムストアでの選択性の高いJOINがより効率的に行える様になりました。

以前の回でもご紹介させて頂いた通り、MemSQLでは行管理をメモリ側で集中的に行い、列管理でストレージ側を活用する形になっています。今回のバージョンアップでも、基本的な考え方はそのままですので、カラム側での作業効率向上は過去データの参照や活用の際に、非常に有効な進化だと思います。


####クエリの最適化関連
（１）ヒストグラムを使用したJOIN処理に対するカーディナリティ推定が利用できるように機能拡張を実施。

MS-SQLサーバ等で出てくる機能になりますが、今回のバージョンアップでMemSQLのクエリ最適化としても使えるようになりました。ネイティブなインメモリSQLデータベースですので、速度的には爆速域での利用が可能でしたが、今回の機能拡張により更にキメが細かいクエリの最適化が行われる様になり、より全方位的な活用シーンの拡張が期待できると思います。

（２）DROP ALL FROM PLANCACHEコマンドの動作を「全てのクエリプランがメモリ/ディスクから削除」されるように仕様更新しました。

この更新は、ある意味非常に重要な機能強化だと思います。MemSQLの基本機能としてクエリのコンパイルやその結果の再利用を効果的に活用する事で、インメモリデータベースとしての性能強化を進めていますが、この際に出てくるリソース消費（顕在・潜在的な）を制御する必要が発生した場合に、今回の更新は極めて有効な解決策の一つになると思います。

（３）スカラーの取り扱いで、ネストされた形式の副選択を利用できるように新しいクエリを追加しました。



（４）クエリのコンパイル時に定数のパラメーター化を無効にするNOPARAM（）関数を追加しました。

（５）式を含むハッシュ型JOINに関する最適化を進めて性能の改善を行いました。


####使い勝手とプログラミング関連
（１）手続き型SQLのSQLステートメント内でレコード変数フィールドにアクセスできるようになりました。

（２）現在待機中のアクティビティの概要を提供するinformation_schema.MV_BLOCKED_QUERIESビューが追加されました。

（３）または値を値に変換するTO_NUMBER（）関数を追加しました。CHARVARCHARDECIMAL

（４）手続き型SQL配列を一連の行に変換するTABLE（）関数を追加しました。

（５）TRUNC（date）およびTRUNC（number）関数が追加されました。TRUNC(date)指定した粒度に日付を切り捨てることができます。TRUNC(number)与えられた数値を指定された小数点以下の桁数に切り捨てることができます。

（６）IPv6またはIPv4インターネットアドレスをテキスト表現からバイナリ表現に変換するINET6_ATON（）関数を追加しました。

（７）IPv6またはIPv4インターネットアドレスをバイナリ表現からテキスト表現に変換するINET6_NTOA（）関数を追加しました。

（８）正規表現パターンを検索し、一致する部分文字列を返すREGEXP_SUBSTR（）関数を追加しました。

（７）ストアドプロシージャがCREATE VIEWおよびDROP VIEWコマンドをサポートするようになりました。

####その他
利用可能なパスワードに関するルールが追加されているとの事です。最小の長さ、大文字、小文字、数字、特殊文字の数などの基準を含む、パスワードの基準が指定出来るようになりましたので、この編を気にされていた方には朗報かもしれません。

また、アカウントロックアウト機能が追加されていますので、ユーザが誤ったパスワードを入力できる回数が指定できるようになります。ユーザーがこの制限に達すると、アカウントは指定された秒数ロックされる仕様が使えますので、今までの様なデータ利活用向けだけではなく、普通のデータベースとしても検討が進められるようになるかと思います。

##今回のまとめ
今回のリリースは、クラウド利用として提供されているヘリオスでの経験やリクエストを数多く採用し、ある意味”より普通のデータベース”に近づく進化が行われています。
いずれにしても、引き続きフリーの利用登録が可能ですので、ぜひ一度お試し頂ければと思います。

##謝辞
本解説に転載させて頂いているスクリーンショットは、一部を除いて現在MemSQL社が公開されている公式ホームページの画像を使わせて頂いております。また、本内容とMemSQL社の公式ホームページで公開されている内容が異なる場合は、MemSQL社の情報が優先する事をご了解ください。