MySQLのリファレンスを読む 1章の続き その⑥
まいえすきゅーえりたい ぽすぐれない おらくるってる(狂ってる)tomoです。
DB屋さんとしての基礎知識が色々欠如している自覚があるのですが、最近またこの本を読んでます。
随分前にあわてて読んだのもあって、もう一度読み返すと改めての学びを得られたり。
特にBツリーのところが好きです。あそこ超おもしr(
読書感想文もブログに書いておこうとおもうので、別記事に書いて、公開できたら良いなと思ってます。夏休みの宿題?
tomomo1015.hatenablog.com
はい、今日もこれの続きです。
1章が長すぎて挫けそうですけど、がんばるんば。ルンバ。
今日読んだもの
1.3 MySQL 8.0 の新機能
ここの単一テーブル DELETE ステートメントのエイリアスの続きから。
- このエイリアス周りはその前の項目でも説明あったきがする
- 正規表現のサポートの箇所は、正直怖い。そこまでSQLでゴニョゴニョしたくない。アプリでゴニョゴニョしたいそのあたりは。
- tempテーブルの話。TempTable ストレージエンジンと称し、インメモリー内部一時テーブルをMEMORY ストレージエンジンを使うとな。カラムはVARCHARかVARBINARY。VARBINARYかぁ。そういえばそんな型ありましたね
- エラーログ周りはリファレンス読む
- バックアップの話。オンラインバックアップ中に DML が許可されるが、一貫性のないスナップショットになる可能性がある操作は防止される。それでも随分親切になった気がする。MySQLでオンランバックアップというと、EnterpriseBackupしか無理って言う認識なので。OracleDBばっかやってる人は、バックアップするとロックかかるという他DBの当たり前にビビるんですが、普通に考えてそれが当たり前です
- MySQLレプリケーションでJSONがサポートされました、と受け取っていいかな。JSON周り本当に多いなぁ。
- コネクション数が上限行っていても、管理接続専用に1セッションは確保してくれると!おぉぉぉこれすごい!知らなかった…!!ただ「接続圧縮」が大分わからない。ナニソレ。
- ホスト名の最大長が60 文字から255 文字まで増えたのは、知ってる。マイクロサービス系やると、これ助かりますよね。長いホスト名にしがち
- 「プラグインで使用される MySQL ヘッダーファイルに C++ コードが含まれるようになりました。」ごめんプラグイン作るまで技術力が至っておりませんorz
今日はここまで!
明日はC APIから勉強しますー!!
MySQLのリファレンスを読む 1章の続き その⑤
まいえすきゅーえりたい ぽすぐれない おらくるってる(狂ってる)tomoです。
私事ですが、今年から娘が小学生になりまして。
もう保育園で十分色んな菌もらってきて強くなったつもりでしたが、小学校で流行ったらしい、強つよの風邪を頂きました。
治るのに約4日ほどかかりました…夏風邪つらい。みなさんも体調にはお気をつけて。
tomomo1015.hatenablog.com
はい、今日もこれの続きです。
1章を読み終える日は来るんだろうか、千里の道も一歩からというので、がんばるぞ!
今日読んだもの
1.3 MySQL 8.0 の新機能
ここのInnoDBのオプティマイザの続きから。
読んでみたメモ
- 不可視インデックスがサポート!おぉこれ嬉しい。Oracleでよく使ってるんですよ。このINDEX効率悪いから不可視にしようね、とか。
- 降順インデックスがサポート、これは実は有名な話、なんですよね。
- カラム値ではなく式の値をインデックス付けする関数インデックスキーがサポート。JSONのデータもINDEX化できるのはこれの恩恵
- 「定数リテラル式から発生する自明の WHERE 条件は、後で最適化するのではなく、準備中に削除されます」これはオプティマイザが意味ないなこれっていうwhereを無視する的な認識でいいのかな。それはそれで大事だけど、これは実行する側が気をつけたい話でもあるよね。反省
- サブクエリの準結合最適化と定数折りたたみはもうちょっと具体的な内容を見ないと理解出来ないな
- ブールコンテキスト周り、これ8にあげたときに影響としてかなりありそう。true/falseの判定変わるように見えると、アプリ的には恐怖なのよね
- UPDATE/DELETEで準結合変換またはサブクエリーの実体化を使用できるようになった。NOT IN 述語やNOT EXISTS 述語を利用できるようになったと。
- ハッシュ結合の性能アップの件はなるほどなと。
- 非再帰テーブルと再帰テーブルの両方の共通テーブル式がサポート。大分複雑なクエリ実行できるようになりそう。
- ウインドウ関数がサポート!RANKとかうまく使うとかなりいいんですよね
- え、何「LATERAL」って知らない!初めて聞いた。これサブクエリ大量に錬成しそうだから使い所気をつけないと怖そう
ということで、今日はラテラルまで。知らないこと本当に多い。楽しい。
MySQLのリファレンスを読む 1章の続き その④
まいえすきゅーえりたい ぽすぐれない おらくるってる(狂ってる)tomoです。
危ない危ない、また三日坊主になるところだったぞ!
tomomo1015.hatenablog.com
今日読んだもの
1.3 MySQL 8.0 の新機能
ここの文字セットのサポートから
- 文字セットのデフォルトが「utf8mb4」になったのは大変有名ですが、utf8mb4っていっても色々あるんですよね。文字コード奥深い、文字コード沼。以下SQLで対応しているutf8mb4がいっぱいあるんだけど日本語に最初に対応したのは「utf8mb4_ja_0900_as_cs」です、と。いやぁ本当、沢山あって最初これ見た時震えました。なん…だと…!!
SELECT COLLATION_NAME, PAD_ATTRIBUTE FROM INFORMATION_SCHEMA.COLLATIONS WHERE CHARACTER_SET_NAME = 'utf8mb4';
- JSON対応。いやだからRDBMSでJSON参照するのやめようよとは言いたいけど言わない。便利だからねJSON。
- JSON 集計関数は使い所がわからないあたり、開発者スキルがなくて反省。でも知っておいたら絶対便利だと思うのでリファレンス読むの楽しみ
- JSON_PRETTY()関数ができて、JSON読みやすくなった、と。これ知らなかったな、確認するときとか便利そう
- ORDER BYでJSON検索する場合、メモリに読み込ませてソートする(早くなる)、KEYで検索するけど短いKEYは早くなる
- JSON カラム値の部分的な更新が可能。ほぉぉ細かい技ができるんですね…!
- JSONのユーティリティ関数が増えてる。このあたりは流行りなのかなぁ
- JSONの正規化のところはリファレンスの例をみて「ほうほう」と思う次第。JSONカラム便利そう。特にこの例とか
mysql> INSERT INTO t1 VALUES ('{"x": 17, "x": "red", "x": [3, 5, 7]}'); mysql> SELECT c1 FROM t1; +------------------+ | c1 | +------------------+ | {"x": [3, 5, 7]} | +------------------+
- JSON_TABLE()関数はJSON データを受け入れ、指定されたカラムを持つリレーショナルテーブル…大変便利だと思うんですけど、乱用こわい。大量にある場合はDynamoとかに入れたい
- データ型指定でデフォルト値としてBLOB、TEXT,、GEOMETRY、JSONが対応。JSONもなのか…
- オプティマイザの話。不可視インデックスがサポート、降順インデックスがサポート(してなかったのか)、式値のサポート(JSONとか)
- 外部結合のところはリライト周りちゃんと読み込みたい
というので、今日はここまで。オプティマイザ周りは復習の意味も込めて明日再度読み込みたいと思います!
MySQLのリファレンスを読む 1章の続き その③
まいえすきゅーえりたい ぽすぐれない おらくるってる(狂ってる)tomoです。
今日も昨日の続きから。
tomomo1015.hatenablog.com
取り敢えず三日目になりましたが、ちゃんと続くんでしょうか?!
今日読んだもの
1.3 MySQL 8.0 の新機能
ここのInnoDBの拡張機能の続きから。
読んでみたメモ
- まずクラスタ化されたインデックスからのクラスタINDEXについて復習。リファレンスに「InnoDB用語」って書いてあってなるほどなと。innodb_parallel_read_threadsはデフォ4なのね。
- ログファイルのサイズと数はバッファプールのサイズによって自動で設定される
- FILE 権限のないユーザーがテーブルスペースを作成できて、暗黙的にMySQL側がファイル作成してくれるの?!ほぇーこれは全然知らなかった
- temptable_max_ramのところはなんというか、メモリ溢れしてSWAPにいく流れになんかにてるような。InnoDB側にいくのね
- innodb_spin_wait_pause_multiplier についてはそもそも スピンロックのポーリング ってなんだって話なんですが、こんな機能あるんだという新発見。row-lockとmutex周りはOLTP系の永遠の悩みよねぇ。これOracleに似た機能ないのかな、なんて思うので調べてみよう(mutexに微妙に悩まされてる)
- ソリッドステートストレージデバイスの存続期間ってなんやねんという話から「 innodb_idle_flush_pct 値は、InnoDB で使用可能な I/O 操作数/秒を定義するinnodb_io_capacity 設定の割合」と聞いて、えぇぇそんな細かい設定もできるのと言う驚き…
- 二重書込みバッファは後でちゃんと読む(なにこれーわくわく)
- ロックがlock_sysからmutexになったのは、Oarcleみを感じるなぁ…
- ALTER INSTANCE {ENABLE|DISABLE} INNODB REDO_LOG でREDOの生成有無を制限、これもなんかOracleみが(二度目)
- 「CREATE TABLE ... SELECT ステートメントは行ベースレプリケーションに対して安全になり、GTID ベースレプリケーションでの使用が許可されるようになりました。 」これ大事。レプリケーションはGTID派です
- 8.0.21のこの古いUNDOを切り捨て時にredoに記録されるようになったの、DB屋さんとしては結構変化点な気がする。redoに書くんだなるほどなぁ
- innodb_extend_and_initializeの話。既存は全部NULLを書いていたのかというのと、file-per-table になると。
- temptable_max_mmapはMMAPから割り当てる最大のメモリサイズ
- AUTOEXTEND_SIZE …あぁぁぁOracleっぽーーーい!(叫)
ということでようやく、InnoDBの新機能を読み込みました。いやぁ沢山!
初めて知った機能や名前もあれば、なんかこう、Oracleみを感じるところもあってもやもやしちゃったり。
MySQLのリファレンスを読む 1章の続き その②
まいえすきゅーえりたい ぽすぐれない おらくるってる(狂ってる)tomoです。
今日も昨日の続きから。
tomomo1015.hatenablog.com
取り敢えず三日目になりましたが、ちゃんと続くんでしょうか?!
今日読んだもの
1.3 MySQL 8.0 の新機能
ここのInnoDBの拡張機能の続きから。
読んでみたメモ
- まずクラスタ化されたインデックスからのクラスタINDEXについて復習。リファレンスに「InnoDB用語」って書いてあってなるほどなと。innodb_parallel_read_threadsはデフォ4なのね。
- ログファイルのサイズと数はバッファプールのサイズによって自動で設定される
- FILE 権限のないユーザーがテーブルスペースを作成できて、暗黙的にMySQL側がファイル作成してくれるの?!ほぇーこれは全然知らなかった
- temptable_max_ramのところはなんというか、メモリ溢れしてSWAPにいく流れになんかにてるような。InnoDB側にいくのね
- innodb_spin_wait_pause_multiplier についてはそもそも スピンロックのポーリング ってなんだって話なんですが、こんな機能あるんだという新発見。row-lockとmutex周りはOLTP系の永遠の悩みよねぇ。これOracleに似た機能ないのかな、なんて思うので調べてみよう(mutexに微妙に悩まされてる)
- ソリッドステートストレージデバイスの存続期間ってなんやねんという話から「 innodb_idle_flush_pct 値は、InnoDB で使用可能な I/O 操作数/秒を定義するinnodb_io_capacity 設定の割合」と聞いて、えぇぇそんな細かい設定もできるのと言う驚き…
- 二重書込みバッファは後でちゃんと読む(なにこれーわくわく)
- ロックがlock_sysからmutexになったのは、Oarcleみを感じるなぁ…
- ALTER INSTANCE {ENABLE|DISABLE} INNODB REDO_LOG でREDOの生成有無を制限、これもなんかOracleみが(二度目)
- 「CREATE TABLE ... SELECT ステートメントは行ベースレプリケーションに対して安全になり、GTID ベースレプリケーションでの使用が許可されるようになりました。 」これ大事。レプリケーションはGTID派です
- 8.0.21のこの古いUNDOを切り捨て時にredoに記録されるようになったの、DB屋さんとしては結構変化点な気がする。redoに書くんだなるほどなぁ
- innodb_extend_and_initializeの話。既存は全部NULLを書いていたのかというのと、file-per-table になると。
- temptable_max_mmapはMMAPから割り当てる最大のメモリサイズ
- AUTOEXTEND_SIZE …あぁぁぁOracleっぽーーーい!(叫)
ということでようやく、InnoDBの新機能を読み込みました。いやぁ沢山!
初めて知った機能や名前もあれば、なんかこう、Oracleみを感じるところもあってもやもやしちゃったり。
MySQLのリファレンスを読む 1章の続き その①
まいえすきゅーえりたい ぽすぐれない おらくるってる(狂ってる)tomoです。
今日は昨日の続きから。
今日読んだもの
1.3 MySQL 8.0 の新機能
ここのInnoDBの拡張機能の続きから。
読んでみたメモ
- データディクショナリは「mysql.ibd という名前の単一の InnoDB テーブルスペースファイル」になったと。なるほど。単独ファイルになるの面白い
- UNDOの表領域を非アクティブ化できるのは、面白いかも
ALTER UNDO TABLESPACE tablespace_name SET {ACTIVE|INACTIVE};
- innodb_rollback_segments 変数は、undo テーブルスペースごとのロールバックセグメントの数を定義する、と。前はロールバックセグメントの合計数だったけど、この変更でUNDOテーブルスペースごとで変えられるからいいかも。バッチ系とかだと大きめにしたいよね。(ここちょっと腹落ちしてない)
- バッファープールの事前フラッシュがデフォルト有効化(10/前は0)
- テーブルスペースの名前変更可能。 後で変えたい時、意外とあるんだよね(XXXXX_01とか末尾に数字いれたくなったりする)ありがとう、感謝しかない。神対応
- innodb_dedicated_server 変数を使用すると以下のパラメータをサーバのリソースに応じて自動設定します。まじですか。
innodb_buffer_pool_size
innodb_log_file_size
innodb_flush_method
- 「 INFORMATION_SCHEMA.INNODB_TABLESPACES_BRIEF」が新しくなったらしいので8のMySQL作って覗く
- まずzlibを知らない。ナニコレ
- ディクショナリ情報 (SDI) はUNDOとグローバル以外が入ってる
- 「innodb_directories オプションを使用すると、サーバーがオフラインのときに、テーブルスペースファイルを新しい場所に移動またはリストアできます。」おぉーついにそんなことが。これは後ほどちゃんと読まないと
- redoの「ユーザースレッドは、書込みを同期せずにログバッファに同時に書き込むことができるようになりました。」はこれ嬉しい。意外とここで待ちになるんだよね(良いかどうかはさておき)
- 「ユーザースレッドによるスピン遅延」がナニソレなので、この辺読まないとだめそう
- ALTER TABLE操作。このあたりはOracle感を感じる
カラムの追加
仮想カラムの追加または削除
カラムのデフォルト値の追加または削除
ENUM または SET カラムの定義の変更
インデックスタイプの変更
テーブルの名前の変更
- BLOBとかCLOBの機能追加は良いと思うんだけど、個人的にあの辺のデータをRDBMSに入れたくない派。オンプレ環境ならわかるけど、AWSとかクラウド使ってるなら他のソリューション選択を検討したいね。JSONもそう。
- innodb_buffer_pool_in_core_file のコアファイル周りは後日きちんと読まないとだめ。恥ずかしいんですがコアファイルって何
- 「オプティマイザによって作成されたユーザー作成の一時テーブルおよび内部一時テーブルは、一時テーブルスペースのプールからセッションに割り当てられたセッション一時テーブルスペースに格納されます。 セッションが切断されると、その一時テーブルスペースは切り捨てられ、プールに解放されます。」という動きはわかりやすくて納得。良いと思う。ちゃんとガベージコレクションっぽいことしてくれてありがとう(違)
今日はここまで!InnoDBの新機能多すぎて困る…!!
MySQLのリファレンスを読む 1章
まいえすきゅーえりたい ぽすぐれない おらくるってる(狂ってる)tomoです。
MySQLをやりたいやりたいと世界の中心で叫び続けてはや数年、ようやくそんな機会が来たのでちゃんとMySQLを勉強してみることにしました。 どうやろう?と思い本を読んだり…なんて考えたのですが、コツコツ読むもので一番いいのはリファレンスだよね、というのでリファレンス読んでみることにしました。 気になったこと、メモしたいところだけ書いてあるので、リファレンスをそのまま全部書くなんて恐ろしいことはしません。
さて、いつまで続くやら…?
今日読んだもの
読んでみたメモ
1.3 MySQL 8.0 の新機能
データディクショナリ これはOracleDBで最近大分揉めもめしたところなので大体わかるかも。詳細は 14章 なのでその時ちゃんと読む
アトミック DDL なにこれ?って調べた所、以下のようなものらしい。つまるところDDL実行するとストレージとbinlogにトランザクションとして一貫性保って更新するよ、ロールバックもちゃんとできるようになったよってことかな。
DDL 操作に関連するデータディクショナリ更新、ストレージエンジン操作およびバイナリログ書き込みを単一のアトミックトランザクションとして結び付けます。 操作は、データディクショナリ、ストレージエンジンおよびバイナリログに適用可能な変更を保持してコミットされるか、操作中にサーバーが停止した場合でもロールバックされます。
セキュリティ周り
- 「caching_sha2_password 認証プラグインが使用可能」については6章しっかり読む。ここ大事
- 「partial_revokes システム変数」でグローバル権限が付与できるってことかな。グローバルってDB跨いだ権限ってことかな?
- 「パスワードの再利用に関する制限が有効」これ気をつけないとな、5系のつもりでやるとまずそう
- 「アカウントはデュアルパスワードを持つことができるようになりました。これにより、停止時間なしで複雑な複数サーバーシステムで段階的なパスワード変更をシームレスに実行できます。」これホント…?できたらすごくすごい!!
リソース管理 これOracleで言うリソースマネージャのことってぼんやり思っておこう
テーブル暗号化 一度もやったこと無い。やりたいなぁと思っていたけど利用条件ちゃんと把握しないと
- 「 NOWAIT および SKIP LOCKED による読取り同時実行性のロック」は気になる。ただここまでアプリケーションで作り込むと後々面倒そうなイメージ(一貫性をある意味無視することにもなるので)