tom__bo’s Blog

MySQL!! MySQL!! @tom__bo

MySQL

MySQL 8.3.0でmoldリンカがサポートされてたので試した

MySQL 8.3.0がmoldリンカをサポートしていたので、フルビルドがどれくらい早くなるか試してみました。 MySQL :: MySQL 8.3 Reference Manual :: 2.8.7 MySQL Source-Configuration Options 先に結果 8.3.0 フルビルドにかかった時間(リンクだけではなくコン…

MySQL アンカンファレンスを開催したい

MySQL アンカンファレンス開催したい。というかします。 概要 最近のMySQLはバージョニング方針も変わって、周辺ツールを含めた機能追加も着々とされている一方で、MySQL関連のイベントは減ってしまったような気がします。 コロナ以降、イベントが少ない気が…

InnoDB redo logを解読している話

この記事はMySQLのカレンダー | Advent Calendar 2023 - Qiitaの19日目の記事です。 MySQLのredoログには何が書かれているのだろうか? そんな疑問を解決するために私はアマゾンの奥地へと旅立つことにしました。 MySQLはSQLをパースし、実行計画を立てたあ…

MySQL 8.1.0から8.2.0までのコミットメッセージのSubject一覧

MySQL 8.0.35や8.2.0のリリースノートがまだ来ないが、githubのほうではtagが切られていたので、commit messageから新しい機能を探してみた。 $ cd mysql-server/ $ gch trunk Already on 'trunk' Your branch is up to date with 'origin/trunk'. $ gb 8.0 …

MySQLのquery review helperを作ってみた

せっかくのGWなので、おもちゃを作りました。 Query Review Helperです。 github.com 背景 最近MySQLで実行されるクエリをレビューするタスクが異常に多くなってきました。 開発者の全員がindexやjoin, partition, limit offsetなどなどのハマりどころを知っ…

SemisyncレプリケーションのFailoverでなぜデータがずれるのか

この記事はMySQL Advent Calendar 2020の1日目の記事です ※ 従来MySQLのレプリケーション構成ではMaster/Slaveという単語が使われてきましたが、現時点の最新バージョンである8.0.22からは、これらの単語がSource/Replicaと置き換えられ始めています。使い慣…

MySQL Benchmark-003 環境構築その3 SSD選択

この MySQL ベンチマーク シリーズはMySQL-Benchmarkタグから一覧できます。 最初の方で環境構築をしていて、その環境で実験しています。 実験で使うSSDを決めるために簡単な比較をしてみる 1回目のベンチマークではもともと持っていたIntelのNVMe SSD 760p…

MySQL Benchmark-002 環境構築その2 10Gb NIC導入

この MySQL ベンチマーク シリーズはMySQL-Benchmarkタグから一覧できます。 最初の方で環境構築をしていて、その環境で実験しています。 前回1Gbのネットワーク帯域がボトルネックになってしまうことがわかったので、10Gbの環境を作っていく 導入機器 NIC X…

8.0.22のprepared statementの調査続き1

tombo2.hatenablog.com ↑についてリノベ8.0.22で話した。 このとき、MTG中にそれぞれが試してみるとgoだと動く、rubyだと応答がなくなるという話をしていた。 tmtmさんがRuby, Cで追実験した結果をブログにしてくれていたので、僕もgoの結果を書いておこうと…

MySQL Benchmark-001 環境構築その1

今年の冬はお家ベンチマーク環境を暖房にする気持ちでベンチマークをやっていこうと思う。 まずは環境構築から。 環境 2年前に組んだこの構成のPCが2台あるので、これを今回のベンチマークサーバにする core i7 8700 (CPU 6core 12threads) Memory 32GB SSD:…

8.0.22でのprepared statementの挙動変化

概要 8.0.22のリリースノートを見るとprepared statementの挙動が変わっているらしい。 特にこれが気になったので、試してみる For a prepared statement of the form SELECT expr1, expr2, ... FROM table ORDER BY ?, passing an integer value N for the …

MyRocksの論文がVLDBに掲載されてBest Industrial Paper Awardを受賞していたので紹介

先週開催されたVLDB(Very Large Data Base)というDatabase分野のトップカンファレンスで松信さんがFirst authorの論文 MyRocks: LSM-Tree Database Storage Engine Serving Facebook's Social Graph が発表され、Best Industrial Paper Awardを受賞されまし…

MySQLでredis storage engineを作った

MySQLのストレージエンジンはplugableになっていて、APIを実装すれば自作のストレージエンジンを組み込むことができる。 ということで、試しにRedisをストレージエンジンとして使うRedis Storage Engineを作りました。 github.com 途中で飽きてしまった ちま…

MySQLで今月の日付一覧を得る with 再帰CTE

sakaikさんのブログで今月の日付一覧を得るクエリを読んでいて、ここで紹介されているクエリが手元で実行できなかったので、メモ。 sakaik.hateblo.jp 原因は手元の環境が8.0.17でVALUES()関数がなかったことが原因。 よく見るとvalues()関数でテーブルを作…

NOT IN (Subquery)などにおけるNULL

MySQLで(他のDBMSは知らない)ある値のリストxを使ってテーブルからIN(x), NOT IN(x)を使ってデータを取っても2つのクエリで全件を取ってこれないという話は有名だが、MySQL Server Blogにantijoin optimizationも含めた解説記事が出たので、これを機に(is nu…

MySQLのslow_logは何を計測して出力されるのか

slow logの時間は何を計測しているのか? きっかけ とあるMySQLインスタンスで1Gbのネットワーク帯域を使い切ってレスポンスタイムが悪化していたという話を聞いた。 確かに遅いがlong_query_timeを小さくしてもslow_logは特に出ていなかったため、どのクエ…

Dive into Binary logs

この記事はMySQL Advent Calendar 2019の9日目の記事です。 binary logとはなにか binary log(以降binlog)はMySQL serverで実行した更新をイベントという形式で出力したログ。トランザクションのコミット時に出力され、コミットの順番で1トランザクションの…

MySQL 8.0.18のHASH JOINを試した

8.0.18がリリースされたのでHash Joinを試してみました。 dockerには8.0.18 imageはなかったのでcentos7にinstallして実験 先にまとめ HASH JOINは等価条件のJOINでかつjoinするカラムにindexがない場合に採用される(ドキュメント1行目) HASH JOINしたかどう…

MySQL Casual Talks vol.12の復習

先日開催されたMySQL Casual Talks vol.12で「binlogを覗く」を発表した際のQAタイムで某瀬島さんからアドバイス頂いたWLを読んだので進捗報告です。 現在もgeneral document, internal manual, WL, source code reference(by doxygen)からbinlogの各種event…

MySQL Casual Talks vol.12を開催しました

タイトル通りMySQL Casual Talks vol.12を開催しました。 登壇・参加してくださったみなさんありがとうございました。 オープニングでも話しましたが、LINE at 新宿ミライナタワーでのMySQLイベントの開催は初のはずです(あいまい) MySQL Casual Talks vol…

MySQLのBug Reportが成功した

MySQLのBug Report もう一週間経ったけど、今回出したバグレポートでドキュメントが修正されました。めでたい。 単にドキュメントが修正されただけですが、せっかくなのでMySQLにBug reportするまでの流れを書いておきます。 アカウント登録 シュッと登録し…

ALTER TABLEにかかる実行時間を見積もりたい

運用をしているとダウンタイムかありかに関わらず、alter tableにどれくらいの時間がかかるのか作業前に把握したいことはよくあります。 各種statusを見ることで一定時間でどれくらいの行を書き換えるかを把握することはでき、作業を始めてからであれば、あ…

MySQL Weekly 始めました

僕自身のMySQLの勉強、キャッチアップのためにまとめリストを作り始めましたが、せっかくなので公開してみます。 mysql-weekly.hatenablog.com です。(アイコン検討中です) MySQL Weeklyでは1週間のMySQLに関する情報をまとめて、簡単なsummaryを作っていき…

Percona LIVE 2019参加してきた (2日目)

Percona LIVE 2019に参加してきました。 前回の続きで初日(Tutorial Day)から Session Day 1, 2の3日間のうち2日目(Session Day 1)の内容です。 おそらく発表のスライドが公開されることと思いますが、全体が非公開になるものや非公開になるページがあるかも…

MySQL Casual Talks #11で話してきた

CREATE TABLE文のParserを作って、parseしたテーブル定義からテーブルのディスクサイズを見積もるツールを作ったので、発表してきた。 table-size-estimatorという名前で、Githubに上げている github.com ツールの骨組みとREADMEにあるサブセットのパースま…

Percona LIVE 2019参加してきた (1日目)

Percona LIVE 2019に参加してきました。 初日(Tutorial Day)から Session Day 1/2の3日間です。 会社の仕事として参加したので、会社様様です。 社内でのレポートは別途書きますが、この記事では個人的に僕が参加したセッションの概要をざっくり紹介します。…

MySQL 8.0 Functional Key Parts

MySQL8.0の機能を調べてまとめている。 Functional Key Partsについて読んだまとめ。 dev.mysql.com MySQL 8.0.13から関数index(functional key parts)がサポートされる。 5.7以前ではカラムの値そのものかカラムのprefixでしかindexを作成することができな…

MySQL 8.0 Descending index

MySQL8.0の機能を調べてまとめている。 Descending indexについて読んだまとめ。 dev.mysql.com MySQL 8.0では、Descending index(DESC, 降順のindex)がサポートされるようになった。 これまではASC(昇順)のindexを逆順にスキャンすることはできたが、パフォ…

MySQL 8.0 Invisible indexes

MySQL8.0の機能を調べてまとめている。 invisible indexesについて読んだまとめ。 dev.mysql.com MySQL 8.0からはinvisible indexesがサポートされる。 invisible indexはoptimizerに使われないindexのこと。 optimizerから見て、visible(利用可能)かinvisib…

MySQL 8.0 Derived Table, Lateral Derived Table

MySQL8.0の機能を調べてまとめている。 Derived Table, Lateral Derived Tableについて読んだまとめ。 DERIVED TABLE LATERAL DERIVED TABLESや8.0の新機能を説明する前に、DERIVED TABLEについて説明する dev.mysql.com DERIVED TABLEとはFROM句のscope内で…