smallpalace's blog

鯖缶主婦の日々の記録です

MySQL8.0のイベントにいってきた201805

こんにちは。smallpalaceです。

MySQLが8.0GAになったということで「Oracle MySQL Innovation Day Tokyo」というイベントが開催され行ってきましたのでいまさらですが備忘録書いときます。

https://eventreg.oracle.com/profile/web/index.cfm?PKwebID=0x551742abcd

個人的に気になったのは、グループレプリケーション文字コードの照合順序とRoleと外部認証連携あたりでした。

ほかのブログとまとめなど

MySQL Innovation Day Tokyoのハッシュタグまとめ - Togetter

Oracle MySQL Innovation Day 2018 Tokyo(5/23) - 構築中。


★mysql8.0最新情報(稲垣さん)

5.7 InnoDB Cluster 8.0

特徴、モバイルファスト

 当初PCメインだったが最近はモバイルがおおい

 絵文字とか文字コード

 GIS空間図形情報サポートの強化

 Unicodeをデフォルトに

DeveloperFirst

 SQLだけではなくスキーマレスのJson型サポート(改良で生まれ変わった

DataDriven

 副問い合わせやサブクエリをWith句で呼び出せる

 ランキング処理

 共通テーブル式、Window関数

24365

 アクセス集中時の対応改善

 不可視インデックス(ワークベンチで使ってないインデックス出せる

  一時的に不可視にできて影響なければ消すとか段階分けられる

 パフォーマンススキーマ(オンにしても負荷大丈夫で最適な情報がとれる

 オプティマイズ

性能向上

 InnDB専用サーバ構成(InnoDBバッファプールサイズを自動設定(動的に)  クラウドフレンドリーな設定永続化(mycnfにかかなくても設定を永続的にする

S1 documentStore S2 HA S3 非同期レプリケーション・自動フェイルおーば S4 シャーディング

MySQL Shell 開発と管理のための5.7からのインタフェース javascript,pytbnon,sqlスクリプト利用可能 スタンダードプロトコルとエクストラ 午後のセッションでくわしく

Jsonサポート ネイティブファイルサポート 仮想列、20以上の関数など

GraalVM 開発言語を踏襲して役立てるVM

UTF-8 絵文字入力、 デフォルトをutf8mb4に変更 最新のユニコード9.0サポート 解析をマルチバイトにしただけでクエリが40倍の速度に。。

Window関数のRANKでランキングもとめたりなど

Select ..For UPDATE NOWAITつけることで行がすでにロックされていればすぐエラーを返す SKIP LOCKEDで行がすでにロックされていればあきらめてスキップする


オプティマイザ

Luさん

CTEの再帰的な処理(With句)ループ制限のデフォルト値が1000になってる

オプティマイザがInmemoryかDiskBoundかを知ってから計画するので効率的になった

Json関数は毎回テーブル生成するのか→select intoで保存できる

大きいJsonドキュメント→8.0から変更部分のみの更新が可能

ヒストグラムのサンプリングで統計情報→サンプリングの比率を調整できる 次の走ってる開発としてストレージエンジン側でスキャン減らしてサンプリングがある


8.0Securty

Ldapとロールの需要がありそうかもと思いました。


記念撮影(巨大なサキラと)

弁当(豪華)

スクエニの人の事例(ツイートとブログ書くのと撮影禁止


とみたさん(MyNAの創設者)

utf8のワーニング、utf8mb3のエイリアスだけどutf8mb4にかわるからきをつけろと

MySQL Shell

パラメータ比較表がGitにあるよ https://tmtm.github.io/mysql-params/

RC版とGA版だいぶちがう

照合順序 defaultだとアクセントの違い、大文字小文字など区別しない ja_0900_as_ks カタカナひらがなも区別するがソート順がJISコード順とのこと。日本語辞書順 utf8mb4_0900_as_csが無難

適切なcollationをつかおう

https://tmtm.github.io/mysql-innovation-tokyo/#/


yoku0825さん(ORACLE ACEのMySQLについてつぶやくとすかさずリプライをくれるお方)

default_password_lifetimeはなおってる

地雷の埋まり具合は5.7の比じゃないと思う

bug90526 パラメータでリリースビルドがおちるやつ リリースビルドなのにドキュメントにないサーバ変数がみえて設定するとあっさりクラッシュ

パラレルログライトとかあのへんドキュメント記載がろくにない(結構いじってるはずなので地雷が多いのでは

auto_incrementのプライマリキーがあるところに Q4mに頼ってたものがつるしのMySQLで実現可能に。

資料の公開はされたもよう。

逝くぞ最新版、罠の貯蔵は十分か

けっこうつぶやいても https://twitter.com/search?f=tweets&vertical=default&q=#mysql_jp&src=tyah


RealtimeAnalitics

Nipun さん

資料公開なし

OLACLE LABSででくる

フィーチャーのコミットはできないのをご承知おきください

マシンラーニングについて取り組んでいる パートナーシップの視点から

リサーチから In-MemoryAnalitics スケールアップ、スケールアウト適切な構成を考えた ハイブリッド型でいこうと ストラテジ3つの柱、どの構成が向いてるか特定をする クエリのパフォーマンスをシングルノードあたりで効率的にさばけなければならない シングルクエリを分散させたら

MySQL側から検索されたものをRAPID側で解析してMySQLに返す構造

個人で組むのはNW回線が大変というのと、RedShiftみたいなものというツイートが。


フレデリック

リレーショナルデータベース 正規化・制約 原始性、一貫性、独立性、永続性  ACID  トランザクション SQL

ドキュメントストア スキーマレス  スキーマ設計、正規化、外部キーやデータ型なし  初期開発を早く始めるのに適している

ほとんどの場合プログラムを書いてるときアプリのライフサイクルのせいでこんな情報も要れないといけないとかでてくる ドキュメントの場合この変更は追加するだけ 配列も埋め込み型のものがある リレーショナルに表せない場合の最適解 ORMを使用しないという選択肢もある、複雑なレイアウトをきにしなくていい ORMはDBAには悪夢、リザルトがないものも JSONはフロントエンドに近いしJSネイティブ

SQLもNoSQLも安定して供給できるような。。 なぜどちらかを選ばなければならないのか両方つかえればいいのでは それでできたもの、MySQL DocumentStore ここではSQLはオプションとなる

トランザクションはつかえるがすべてでつかえるわけでない スクリプティングのツールなどは使える メンテナンスなど同じ方法でできる X DevAPIをつかう(コネクタが必要、C;;,Java,.Net,Nodejs,python,php) ドキュメントは1gbまでサポートできる max_allowed_packetの制限による リレーショナルテーブルも混在させることができる MySQLShellからつなげられる

MongoDBからMySQLへサンプルレストランコレクションを使ってみる

DocumentIDがプライマリキーにあたる。なければ後からつけられる


Replication Luisさん(ディレクターのかた

・概要と進化 ・利用例

・技術アップデート

バイナリログ、メタデータ、ほかシステムとの連携をより簡単に 運用  マルチソースレプリケーションが5.7で追加された   高度なワークフローをできるように、統合などで複雑なクエリをやりやすく   8.0でチャネルごとにフィルタを入れるなどをソースにもとづいてすることができるように  グループレプリケーション   クラスタからはずれたレプリカへの変更反映回避、自動的に参照専用になる   プライマリ選択の重みづけによってF/O時にマスタ昇格の選択基準にできる   いままでランダムだった

  5.7で導入されてたものが80でさらに多くのオプションが増えてる   フローコントロール 監視  遅延の監視をマイクロ秒単位の精度で。   非同期レプリケーションの構成全体を通じての監視  グループ全体のステータスをすべてのサーバにきける  亜プライヤーの処理性能効率向上(WriteSetの並列処理を導入  高速なグループレプリケーションリカバリ(WriteSetを用いてレプリカが素早くオンラインに) 

・バックポート

5.7.20に以下がバックポート   クラスタからはずれたqレプリカへの変更反映回避、自動的に参照専用になる   プライマリ選択の重みづけによってF/O時にマスタ昇格の選択基準にできる   いままでランダムだった

・検証中の新機能

xcomというパクソスのようなもの

・ロードマップ

グループレプリケーションについてはまだまだやらなければならないことがある

・まとめ

http://mysqlhighavailability.com

http://dev.mysql.com/doc/refman/8.0/en/


InnoDB Cluster fred

100% available

高可用性と拡張性を兼ね備えた単一製品、使いやすい統合ソリューションを提供

アプリからRouterにつながる 簡単なのはRouterをAPPにのせとくこと 中心機能は、Router,Shell、GroupReplication。 GroupReplicationはただのプラグイン。インストールするとシステム上に存在するもの GRはReplicatedDatabaseStateMachine理論を実装している グループのすべてのメンバが同時に書き込みが可能で一貫性を保ちながら。 競合の検出と解決を実装しています(非同期の場合はない) 競合のかいけつには最初のコミットが勝つ GRは自動的な分散回復を可能にします(手動でなにかするひつようがない) すべてのMySQLプラットフォームをサーポートしている Linux,Win、Solaris,OSX,FreeBSD

GR MySQL Xcomプロトコルをベースにしてる  Paxosベースのプロトコル  役割は分散システム全体にメッセージを配信する   アトミック(原始的に)配信する   全体の順序を考慮して   ユーザのメリット  マニュアルでのF/Oが不要になる、手動、複雑なスクリプトで処理する必要がなくなる  GRは耐障害性を提供  ノードが最低3つ必要  GRはどのノードでも更新可能(マルチマスタモードなら)  自動的にクラッシュ、失敗、再接続を処理  簡単に高可用性サービスセットアップ可能に  デフォルトでは「シングルプライマリモード」で動作する   すべてのサーバに書くと制限ができる、クエリツールでワークロードを知ることもできるが   競合で多くのトランザクションがフォールバック、フォーリンキーで問題がおきるなど制約ができる   まずはこちらでテストしてね  多くの行を書く場合にはシングルノードに書くほうがいいことも  group_replication_single_primary_mode、これを変える場合はクラスタの再起動がいる

MySQL Router アプリとバックエンド間のトランスポートとして機能する、クラスタからみるとシングルインスタンスにみえる クラスタが非同期スレーブ、非同期マスタとして機能するということができる

特に設定を必要とせずClusterのメタデータを使用して自動的に設定する 常に最新利用推奨、クライアント証明書サポート ブートストラップどのノードでも可

ProxySQL Routerでカバーできない機能を使いたい場合

MySQLShell 管理クラスたにつなげる。adminAPIつかえる

set persistsがすばらしい。ここでmy.cnfを変えずに設定ができる クラウドフレンドリー

これはHAソリューションというとこが重要

デモ

GroupReplicationはGTID必須 RestertもShellからできる 修正がされたらコンフィグチェックできる

GTID,データの差分をみて差分がある場合joinできない

nodeが2つのときクラッシュするとquorumが50%以上にならないのでクラスタが止まる 故にクラスタには3つのノードが要る

落ちたらリカバリをすることもできる

MySQLのサービスでHAがないといういいわけはもうきかないよと


Q MySQLRouter自身の冗長化について A Routerの配置の仕方として単独サーバならkeepalivedなどと連携、おすすめはAppサーバに乗せる冗長化考えない方法    Q ASYNCと多段レプリケーションはできる? A トランザクションをいかに同期するかというやつなのでASYNCはできる、カスケードも可能   データセンタをまたいだDR構成する場合、地域ごとにGRクラスタおいといてその間を非同期でつなげることも可能

Q 8.0の地雷についておすすめど A GAになる前から本番利用者がいます、テストにかける工数が飛躍的に多くなってるのでまえよりも安定しているはず   CTE(WITH句)の機能がどうしても使いたいというお客様がいてさすがにボリューム大きくてバックポートできずスレーブで8.0でつかってる   会社も(FBとBooking.com)

Q router、APサーバに置くとライセンス料が変わるとかでこれを回避する方法はないですかと A コミュニティ版でてます。→機能としてはRouterだけコミュニティ版でも動きます

Q TDEをつかってテーブル作ったときオプティマイザヒストグラムも暗号化されるのか A TDEはテーブルスペースのなかを暗号化するのでヒストグラムがあるのはデータディクショナリなので現時点では暗号化されない   がちかいうちに暗号化されるよてい   いま表領域、Redo、Undoはできてる、年内にはデータディクショナリも。

Q チェック制約について A シンタックス的にはサポートされてないんでエラーになるのでは、短期的なロードマップに入ってる

Q データタイプのタイムスタンプが2038年なのをもっと長くできないのか A 我々も認識している重要なもんだい、日時に関する改良はロードマップに入ってる    MySQLのリリースモデルは継続的リリースモデルということにしている。 機能追加はいつでもあるよと。

Q オプティマイザについて、コンディションファンなうとフィルタ実行計画の関係で帰ってこなくなったクエリがあったのでオフにしたが   それだと機能つかえないのか A ご指摘パラメータは5.7で性能劣化を我々も確認してる。8.0でヒスとグラム有効にしていただくとデータが入るのでオプティマイザが判断   できるので、フィルタ有効にすると性能が伸びるはず

Q 分散システムに配信してるパクソスベースのプロトコル、マスタで行われた合意をすべて配信してるのか

A すべてのReplicationされるべきすべてのサーバ間でされる必要がある、性能に関して一括処理されるようなこともある

多い行、少ない行の、最初が勝つ問題について? →片方のトランザクションが多い、少ない、であっても2つのトランザクションが競合しない場合は束ねて順に行われる  競合する場合は後ろがロールバックされる

小さいトランザクション推奨? →yes  マルチマスタならそうだがシングルマスタならまあ気にしなくても大丈夫


さすがに丸一日だとボリューミーでした。年末まで定期的にイベントがあるようでMHA作者の元サポートエンジニアのFaceBookにいる松信さんが登壇されるやつも予定してるとのことでした。

Tシャツもらいました。娘にとられてパジャマになりました。

では見ていただいてありがというございました。またの機会に。