スロークエリログには以下のような値が出力される。
# Time: 180307 14:34:31
# Query_time: 705.135178 Lock_time: 0.000077 Rows_sent: 100 Rows_examined: 1046531642
Query_time
クエリの実行時間(単位:秒)
Lock_time
クエリの実行が開始されるまでの時間。他のスレッドのロックの待ち時間
The time spent waiting for table locks. This value is computed in microseconds but normalized to picoseconds for easier comparison with other Performance Schema timers.
Rows_sent
文の実行中にストレージエンジンから読み取られた行の数
The number of rows returned by the statement.
Rows_examined
操作対象となった行数
The number of rows read from storage engines during statement execution.
参考:mysql
https://dev.mysql.com/doc/refman/5.6/en/events-statements-current-table.html
参考:stackoverFlow
https://stackoverflow.com/questions/19036176/how-to-interpret-slow-query-log-information-generated-by-mysql
■MySQLのコンソールから動的に設定する
スロークエリログを出力する設定になっているか確認する
MariaDB [ ( none ) ] > show variables like 'slow%' ;
+ -- -- -- -- -- -- -- -- -- -- - + -- -- -- -- -- -- -- -- -- -- -- +
| Variable_name | Value |
+ -- -- -- -- -- -- -- -- -- -- - + -- -- -- -- -- -- -- -- -- -- -- +
| slow_launch_time | 2 |
| slow_query_log | ON |
| slow_query_log_file | xxx - slow . log |
+ -- -- -- -- -- -- -- -- -- -- - + -- -- -- -- -- -- -- -- -- -- -- +
3 rows in set ( 0.00 sec )
■上記slow_query_log がOFFになっているとスロークエリの出力は行われない。
以下のコマンドを実行する。
MariaDB [ ( none ) ] > set global slow_query_log_file = '/var/lib/mysql/xxx-slow.log' ;
MariaDB [ ( none ) ] > set global long_query_time = 0.4 ;
MariaDB [ ( none ) ] > set global slow_query_log = ON ;
slow_query_logがONのとき、long_query_time( 上記では0.4秒)を超える場合はスロークエリとして出力される。
変更されているかを確認する場合は、一旦コンソールを抜けて、再度入り直すと反映が確認できる。
■以下で閾値を確認出来る。
MariaDB [ ( none ) ] > show variables like 'long%' ;
+ -- -- -- -- -- -- -- -- - + -- -- -- -- -- +
| Variable_name | Value |
+ -- -- -- -- -- -- -- -- - + -- -- -- -- -- +
| long_query_time | 0.400000 |
+ -- -- -- -- -- -- -- -- - + -- -- -- -- -- +
1 row in set ( 0.00 sec )
mysql> SHOW VARIABLES;
または
mysql> SHOW VARIABLES LIKE ‘%cache%’;
以下のように出力されるよ
+——————————–+———————-+
| Variable_name | Value |
+——————————–+———————-+
| binlog_cache_size | 32768 |
| binlog_stmt_cache_size | 32768 |
| have_query_cache | YES |
| host_cache_size | 279 |
| innodb_disable_sort_file_cache | OFF |
| innodb_ft_cache_size | 8000000 |
| innodb_ft_result_cache_limit | 2000000000 |
| innodb_ft_total_cache_size | 640000000 |
| key_cache_age_threshold | 300 |
| key_cache_block_size | 1024 |
| key_cache_division_limit | 100 |
| max_binlog_cache_size | 18446744073709547520 |
| max_binlog_stmt_cache_size | 18446744073709547520 |
| metadata_locks_cache_size | 1024 |
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 1048576 |
| query_cache_type | OFF |
| query_cache_wlock_invalidate | OFF |
| stored_program_cache | 256 |
| table_definition_cache | 1400 |
| table_open_cache | 2000 |
| table_open_cache_instances | 1 |
| thread_cache_size | 9 |
+——————————–+———————-+
24 rows in set (0.00 sec)
参考サイト
mysqlのデーターベースをコピーしたい時に
CREATE DATABASEを出力したくない場合は
–no-create-dbまたは-nオプションを付ける。
ダンプして
mysqldump -u user -p -n source_db > source_db_dump.sql
別のDBに突っ込む
mysql -u user -p dest_db
mysql> source source_db_dump.sql;
1行でも書けるよ。
□構造をコピーしてテーブル作成
CREATE TABLE kakaku_copy LIKE kakaku;
□もとテーブルのデータをインサートする
insert into kakaku_copy select * from kakaku;
mysqlをちゃんと設定してたつもりだったのだが
cakeで画面に表示したデータが文字化けする。
他のDBはすんなりいくのにmysqlけっこう躓く。
・mysqlに直接文字コードutf-8でデータを流し込む
・sshから見ると文字化けしない。
・CSEでも文字化けしない。
・htmlのcharsetの指定はutf-8でおかしくない
・ファイルの文字コードもutf-8で保存している
findAllした直後のデータを見ると化けている。
ここが問題か。
my.cnfを見直す
これが「skip-character-set-client-handshake」抜けていたのか!
my.cnfの[mysqld] セクションに以下を追加
[mysqld]
default-character-set = utf8
character-set-server = utf8
skip-character-set-client-handshake ← 追加
早々にレンタルサーバでも試さないと。
参考サイト
http://wota.jp/ac/?date=20061011
複数種類のDBを扱っていると、どれがどれだか
忘れてしまう。
mysqlのコマンドラインで外部ファイルを読み込む方法を
書いておく
mysql > source ファイルパス
または
mysql -uusername -p <ファイルパス
これはパスワードを聞いてくるので入力すればOK
作成済みのデータベースの文字コードは
my.cnfの[mysqld]セクションで
default-character-set = utf8
としても変更出来ないようなので、
テーブル作成時に文字コードを指定するか、
作成しなおすしなかい。
データベースの文字コードを調べる
mysql> show create database データベース名;
または
mysql> status
文字コード指定してDB作成
mysql> create database データベース名; default character set utf8;
SHOW VARIABLES LIKE ‘char%’;
で確認できる
+————————–+—————————————————-
—–+
| Variable_name | Value
|
+————————–+—————————————————-
—–+
| character_set_client | utf8
|
| character_set_connection | utf8
|
| character_set_database | utf8
|
| character_set_filesystem | binary
|
| character_set_results | utf8
|
| character_set_server | utf8
|
| character_set_system | utf8
|
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.0\share\chars
ets\ |
+————————–+—————————————————-
日付の整形を行ないたい時に、DBそれぞれで関数・書式がことなるので
順次メモする。
DATE_FORMAT(date,format)
%Y/%m/%d %H:%i:%s
%Y 年・数字・4桁、 %m 月・数字(01-12)、%d 日・数字(01-31)
%H 時間(00-23)、 %i 分・数字(00-59)、%s 秒(00-59)
投稿ナビゲーション
If I wasn't hard, I wouldn't be alive. If I couldn't ever be gentle, I wouldn't deserve to be alive.