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シャツもらいました。娘にとられてパジャマになりました。
では見ていただいてありがというございました。またの機会に。