お誘いいただいて、LLイベントでSQLの超入門のお話をさせていただきました。 LLイベントは、当初(20年近く前)から「Lightweight Language」のイベントとして長らく開催されてきましたが、Lightweight に限らずもっと幅広い言語を学ぼうということで、2017年に Learn Languages の略ということに変わったそうです。 https://ll.jus.or.jp/2022/ 今回のLLイベントは、Open Developers Conference (ODC)併催ということで、ODCの1トラックをもらう形で開催されました。 https://event.ospn…
TL;DR
-
パラメーターの組み合わせを間違えた場合、本来Abortして起動しないもの(ここまでは意図的)がAbortの処理に失敗してクラッシュする
- “Not a Bug”, 仕様だということらしいので、気にせず正しい組み合わせで起動してやれば良いだけのはず
- skip-grant-tablesしたい時はmy.iniに一緒にshared-memoryを書いてね!
MySQL 8.0では skip-grant-tables …
[さらに読む]
TL;DR
-
InnoDBの暗黙の行IDはテーブルにINSERTした順番で払い出される
-
ソースでは並列で走ると、INSERTした順番がCOMMITした順番とは限らない
-
レプリカではMulti Thread Applierを使っていない限り、COMMITした順番にINSERTがされる
-
よってソースとレプリカでは暗黙の行IDがズレることがある
-
【2022/08/25 12:01】書き込みロックをとっても(テーブルを読み書き一切できない時間があって)良いなら多少安全にやる方法はある
MySQL 8.0.30 のリリースノートをみてわいわい言う勉強会を開催しました。mysql.connpass.com ここ数回は18時から開催していたところ、今回19時からの開催にしてみましたが、個人的には半端な時間だなぁという印象でした。皆さんにも尋ねたところ、まさに十人十色のご都合があり、お話を聞かせてもらいたい方もいっぱいいて、みんなが合う時間帯を見つける難しさを感じました。とはいいながらも時間を工面して参加してくださった皆さん、本当にありがとうございました! あと、アレです。「車座になってわいわい言うような、顔の見えるイベントをやりたい」という趣旨でカメラオンを(案内ページでは)お願…
TL;DR
再現方法。
8.0.19でレプリケーション設定をしたMySQLを用意する(8.0.28では再現しなかった。5.7.39でも今のところ再現していない)
$ make_replication_sandbox --how_many_slaves=1 8.0.19
$ cd sandboxes/rsandbox_8_0_19/
$ vim master/my.sandbox.cnf
..
binlog_group_commit_sync_delay = 1000000 ### binlogのgroup_commitを起こしやすくするため
$ vim node1/my.sandbox.cnf
..
slave_parallel_workers = 2
slave_preserve_commit_order = ON
slave_parallel_type = LOGICAL_CLOCK
$ ./restart_all
俺は未だにMySQL::Sandboxを使っているのだ、すまんな…。
2つのターミナルを用意して、↓の2ステートメントを1秒以内( …
[さらに読む]MySQLにおける、TRUEとFALSEとゼロとイチ。 同僚が WHERE column1 = 1 OR 2 が全ての行を返すと一瞬で看破していてすごい— yoku0825 (@yoku0825) 2022年8月15日 同僚が WHERE column1 = 1 OR 2 が全ての行を返すと一瞬で看破していてすごい 後者で悩まされたの思い出したなぁselect * from sample where id = 1 or 2;+----+-----+| id | col |+----+-----+| 1 | a || 2 | b || 3 | c |+----+-----+select * fr…
この記事は
続・歯抜けを埋めるSQL(10万件編) - sakaikの日々雑感~(T)編
への「俺ならこうひねるかな」版です。
やってることは坂井さんと大して変わっていませんが、方向性が結構違うのが面白いのでメモしておきます。
というかSQLだけでやっていないのでタイトルに反しています()
坂井さんの手法でやった時の所要時間はこんなものでした。290ms。
mysql80 237> SET @@cte_max_recursion_depth=100005;
Query OK, 0 rows affected (0.00 sec)
mysql80 237> INSERT INTO t22
-> WITH RECURSIVE num(n) AS (SELECT 1 UNION ALL SELECT n+1 FROM num WHERE n<(SELECT MAX(id) FROM t22))
-> SELECT n id, null, null FROM num LEFT OUTER JOIN t22 ON (num.n=t22.id) WHERE t22.id IS …
[さらに読む]
ひとつ前の日記で、こんなことを書きました。 1000回ループを回して1件ずつDELETEしたのに、1006件が消えている謎は、気持ち悪いので少し考えてみたいと思います。ナゾが解けた方はコメント欄やTwitterやご自身のブログなどで教えてください。 実はこの動作、2回実施しているのですが、1回目は 99029件になりました。こちらは既に削除済みのIDを再度削除に行くなどが発生したのだと理解していたのですが、見直してみるとこれも、ずいぶんと重複しすぎている感もありますね。(10万の中から数字をひとつ決めるのに、こんなに被らないだろうと) 具体的に発生している事象の詳細は、ひとつ前の日記をご覧くだ…
先日、こんな日記を書きました。 sakaik.hateblo.jp この中で、 この方法で、件数が多くなった場合にどれくらいの速度で動きますかね。 10万件かそこらでは意外とすんなり動く気もしていますが、1000万件となるときついかもという気もします。 と書いたのですが、10万件程度ならすぐに試せそうなので、やってみました。 条件と手順 1から10万までの primary key auto_increment な値を持つ列がある そのうち 1000件ほどを歯抜けにしてみる 前回作った「歯抜けを埋めるSQL」を試してみる テーブルとデータの準備 テーブル作成 mysql> CREATE TABL…