以下、どのくらい減るかを調べたメモです。
※ 無効にして問題ないのかという点については断定を避け(詳しくないので)、この記事では無効にしたときにどのくらいメモリ消費が減るか調べたことについてのみ書きます。ただ、軽く調べた限りでは、障害の調査やパフォーマンスチューニングをしないのであれば、開発用途では無効にしても不都合はなさそうに思えました。
※ 以下、"ps" と書いているのは performance_schema の略です。
起動した後のメモリ使用量(docker stats
で表示される値):
MySQL のバージョン | ps = ON(MiB) | ps = OFF(MiB) |
---|---|---|
5.6.61 | 464.6 | 59.8 |
5.7.34 | 194.3 | 62.7 |
8.0.24 | 335.9 | 118.6 |
5.6.61 では無効にすることで 88%減りました 😮
また、5.7 でメモリ消費がかなり改善されたことが分かります。
show engine performance_schema status
でパフォーマンススキーマ全体でのメモリ使用量を見てみると次のようになっており、上記で減った量とほぼ一致していました。
MySQL のバージョン | performance_schema.memory (MiB) |
---|---|
5.6.61 | 403.9 |
5.7.34 | 131.3 |
8.0.24 | 208.4 |
- (作業用ディレクトリ)
- sakira-db/
- 0_sakila-schema.sql
- 1_sakila-data.sql
- conf.d/
- my.cnf
conf.d/
と sakila-db/
をそれぞれマウントして読み込ませました。下記のスクリプト参照。
[mysqld]
# デフォルトで ON
performance_schema=OFF
client.sh
#!/bin/bash
CONTAINER_NAME=mysql-sakila
docker exec -it -e MYSQL_PWD=root $CONTAINER_NAME \
mysql --protocol=tcp -uroot -Dsakila "$@"
restart.sh
#!/bin/bash
CONTAINER_NAME=mysql-sakila
TIMEOUT_SEC=120
# MYSQL_VER=5.6.51
# MYSQL_VER=5.7.34
MYSQL_VER=8.0.24
# 動いていたら止める
if (docker ps --format "{{.Names}}" | grep '^'${CONTAINER_NAME}'$' > /dev/null); then
docker stop $CONTAINER_NAME
fi
# mysqld 起動
docker run --rm -it \
-e MYSQL_ROOT_PASSWORD=root \
-v "$(pwd)/conf.d:/etc/mysql/conf.d" \
-v "$(pwd)/sakila-db:/docker-entrypoint-initdb.d" \
--name $CONTAINER_NAME \
-d \
mysql:$MYSQL_VER
# mysqld の起動完了を待って exit
for i in $(seq $TIMEOUT_SEC); do
if (./client.sh -e "select 1" > /dev/null 2>&1); then
printf "\n"
echo "ok"
exit 0
else
printf "."
sleep 1
fi
done
echo "failed"
exit 1
ps_info.sh
#!/bin/bash
set -o xtrace
./client.sh -e "
show variables like 'performance_schema'
"
# パフォーマンススキーマ全体でのメモリ使用量
./client.sh -e "
show engine performance_schema status
" | grep 'performance_schema.memory'
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント