わざわざ普段のMySQL勉強会で「10年前はこんなのでした」「15年前のバージョンでこんなのがあってね」なんて話をする奴は、いない。やっぱりみんな、最新バージョンでどうなったのか、どう使っているのか、という話をしたいし、聞きたい。だからこそ、振り返りをコンセプトとする周年イベントは、開催したかった。
今年2020年は、 …
[さらに読む]
11年ほど前に書いた日記がふと目にとまりました。CHAR(0)という列を定義できるというお話。
sakaik.hateblo.jp
当時のバージョンが明記されていないため、よくわからないのですが、最新の 8.0.20では挙動が変わっているようです。
mysql> CREATE TABLE t1 ( a CHAR(0), b VARCHAR(0));
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO t1 VALUES ("ABCDE", "FGHI");
ERROR 1406 (22001): Data too long for column 'a' at row 1
ちゃんとエラーとして動作するようになりました!(というか勝手に切り捨てるのをやめただけとも言う)
当時の実行結果で、WARNING …
slack
とかを使っていると、新たに部屋に参加した人は挨拶するじゃないですか。「こんにちは!」って。そしたら、既に部屋にいる人は「こんにちはこんにちは!」って返しますよね。その後に入ってきた人は、これを見て「こんにちはこんにちはこんにちは!」って挨拶したり、次の人は「こんにちはこんにちはこんにちはこんにちは!」って書き込んだり、しますよね。
これを SQL でさくっと書けないか、と、とある チャンネルに @yoku0825
さんが書いた疑似SQLがこれ。
WITH RECURSIVE t AS
(SELECT 1 AS c, 'こんにちは' AS str
UNION ALL
SELECT c + 1, CONCAT(str, str) FROM t WHERE c < ?)
SELECT CONCAT(str, '!') FROM t;
…
[さらに読む]TL;DR
--output=slowlog と --no-report でできる
書き出しが全てなのでそれは置いておいてハマったこと。
pt-query-digest --type=tcpdump の2020年問題
MySQLのMECABによる最近つぶやかれている単語の解析
MySQLのMecabプラグインを利用して集計したデータを解析する過程で、INNODB_FT_INDEX_TABLEにて含まれている単語を確認し集計しようとしたが、
サーバーのスペックが低く集計中にハングしてしまったので、メモリーのINNODB_FT_INDEX_TABLEの内容をInnoDBテーブルに落として集計してみた。
もし、同様に形態素解析で解析されたワードを集計したいけれども、メモリー量が不足していて単語を集計出来ない場合の回避策として。参考までに。
root@localhost [(none)]> desc INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE; +--------------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+---------------------+------+-----+---------+-------+ | WORD …[さらに読む]
はじめに
MySQL8.0.20で追加・変更されたパラメータをなんとなく眺めてみました。
パラメータの説明については基本的にはドキュメントからの引用です。
変更されたパラメータ一覧
例によってとみたさんのパラメータ比較ツールをお借りしました。
| Parameter | 8.0.20 | 説明 |
|---|---|---|
| binlog-transaction-compression | FALSE | バイナリログファイルに書き込まれる … |
TLDR;
MySQL 8.0.20 Release Note
Hash joins are now used any time a nested block loop would be employed. This means that hash …
[さらに読む]昨日はmrubyでMySQLのUDFを作ってみたんだけど、関数毎にCのプログラムを書くのがめんどくさいので、簡単なツールを作ってみた。
詳しくは README 参照。
fib.rb と fib.spec をこんな感じで作っておいて、
fib.rb
LONG_LONG_MAX = 9223372036854775807
def fib(n)
b = 1
c = 0
n.times do
a, b = b, c
c = a + b
raise 'Overflow' if c > LONG_LONG_MAX
end
c
end
fib.spec
MrubyUdf.function do |f|
f.name = 'fib' # 関数名は fib
f.return_type = Integer # 戻り値は Integer
f.arguments = [ # 引数は一つで型は Integer
Integer
]
end
% mrubyudf fib.spec
とやれば fib.so が出来上がるはず。 …
[さらに読む]MySQL では @ で始まるユーザ定義変数を使うことができます。
mysql> SET @v1=123, @s1="ABC"; Query OK, 0 rows affected (0.00 sec)
こんなふうに定義すると、SELECTなどで使うことができます。
ここで、上で定義した2つの変数と、未定義の変数をSELECT文で見てみると:
mysql> SELECT @v1, @s1, @t1; +------+------+------------+ | @v1 | @s1 | @t1 | +------+------+------------+ | 123 | ABC | 0x | +------+------+------------+
上で値をセットした v1, s1 は、それぞれセットしたとおりの値が表示されていますが、未定義の @t1 には "0x" と表示されてしまいました。
値が NULL だとそうなるのか?
mysql> SET @s1=NULL; mysql> SELECT @v1, @s1, @t1; …[さらに読む]