㈠ 如何查看mysql執行的所有以往 sql 語句歷史命令
如果你想知道mysql執行的所有以往 sql 語句歷史命令,需要配置log
my.ini文件中
log=log路徑 比如D:/MySQL/datalog.log
配置後重啟mysql服務,然後就可以查看mysql執行的sql語句了,
如果你沒開啟日誌的話,那就沒辦法
㈡ 如何記錄MySQL執行過的SQL語句
第一種: 查 Slow query 的 SQL 語法:
log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 2 (超過 2秒的 SQL 語法記錄起來, 設短一點來記錄除錯也是一種方法 XD)
第二種: 設 MySQL Replication 用 binlog:
log_bin = /var/log/mysql/mysql-bin.log (此檔要用 mysqlbinlog 解來看)
mysql 會將所有 INSERT/UPDATE/DELETE 語法記於此(但是語法可能跟你想的不同), 這是要寫給 SLAVE 用的 log 檔
第三種: 推薦此方法, 將 MySQL 執行的每行指令全都記錄起來:
log = /tmp/mysql.log
restart mysql 後, tail -f /tmp/mysql.log 就可以看到羅!
補充: 最早前的方法是 mysqlmp, 然後執行完後再 mysqlmp, 再 diff, 但是在 DB > 1G 後就放棄此方法了 XD
㈢ 如何查看mysql執行的所有以往 sql 語句歷史命令
mysql 有這樣一個機制,就是,在用戶的主目錄下會生成一個.mysql_history 的文件,這個文件會記錄用戶登錄mysql後,在mysql中敲過的每條命令。
cat ~/.mysql_history 即可以看到以前的命令歷史。
㈣ 如何查看mysql中執行sql語句
如果我的理解沒錯的話,你的意思是正在執行的sql語句吧,
命令:
mysql>show full processlist;
示例:
mysql>select sleep(20);
另一個session執行:
mysql>show full processlist;
--- 可以看到正在執行的語句 ---
| 183 | root | localhost | NULL | Query | 6 | User sleep | select sleep(20) |
㈤ 怎麼打開/查看MySQL的SQL記錄
要是想用命令行的話,下面給你一些命令(MySQL)
啟動,關閉MySQL
在CMD中輸入: net start mysql
在服務管理器中啟動,關閉.
MySQL登錄
在CMD中輸入
mysql –h localhost –u root -p
查看資料庫: show databases;
使用資料庫: use db_name;
查看錶: show tables;
查看錶結構: describe table_name;
查看錶: show tables;
要是不想用命令就在安裝MYSQL的瀏覽器,直接在裡面打開看就好了
㈥ 如何記錄MySQL執行過的SQL語句
您好,很高興為您解答。 開啟記錄MySQL執行過SQL語句的方法很簡單:編輯/etc/my.cnf文件,在[mysqld]節下面添加:log=/var/lib/mysql/sql_row.log行(日誌的路徑自己根據需要定義)。 [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Default to using old password format for compatibility with mysql 3.x # clients (those using the mysqlclient10 compatibility package). old_passwords=1 log=/var/lib/mysql/sql_row.log # Disabling symbolic-links is recommended to prevent assorted security risks; # to do so, uncomment this line: # symbolic-links=0 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid 修改完畢後,記得重啟 MySQL: service mysql restart # 或者 /etc/init.d/mysqld stop /etc/init.d/mysqld start 現在去 /var/lib/mysql/ 路徑下的 sql_row.log 文件應該是能夠看到 MySQL 什麼時候執行了哪些程序了
㈦ 如何看mysql執行的sql語句
1先通過status命令查看Mysql運行狀態
mysql> status;
--------------
mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1
Connection id: 113752
Current database: information_schema
Current user: push_user@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.1.73 Source distribution
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: utf8
Client characterset: latin1
Conn. characterset: latin1
UNIX socket: /tmp/mysql.sock
Uptime: 22 days 8 hours 31 min 23 sec
Threads: 38 Questions: 1037751897 Slow queries: 2356 Opens: 79836
Flush tables: 1 Open tables: 64 Queries per second avg: 537.282
--------------
在上面顯示列表的最後一條,我們來查看Slow queries這一項的值,如果多次查看的值大於0的話,說明有些查詢sql命令執行時間過長。
2)這時再通過show processlist命令來查看當前正在運行的SQL,從中找出運行慢的SQL語句,找到執行慢的語句後,再用explain命令查看這些語句的執行計劃。
mysql> show processlist;
+--------+-----------+---------------------+--------------------+---------+-------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+--------+-----------+---------------------+--------------------+---------+-------+-------+------------------+
| 50270 | ambari | DataBase-01:41512 | ambari | Sleep | 23 | | NULL |
| 50271 | ambari | DataBase-01:41511 | ambari | Sleep | 6 | | NULL |
| 50272 | ambari | DataBase-01:41514 | ambari | Sleep | 23 | | NULL |
| 62452 | oozie | DataBase-02:42987 | oozie | Sleep | 25 | | NULL |
| 63660 | ambari | DataBase-01:56052 | ambari | Sleep | 0 | | NULL |
| 110404 | push_user | localhost:33817 | quartz | Sleep | 12 | | NULL |
| 112835 | push_user | localhost:46571 | hibernate | Sleep | 1 | | NULL |
| 113163 | push_user | localhost:56585 | hibernate | Sleep | 1 | | NULL |
| 113289 | push_user | 14.118.132.20:47333 | DW | Sleep | 628 | | NULL |
| 113320 | push_user | localhost:47428 | hibernate | Sleep | 3 | | NULL |
| 113321 | push_user | localhost:47429 | hibernate | Sleep | 3 | | NULL |
| 113322 | push_user | localhost:47430 | hibernate | Sleep | 3 | | NULL |
| 113357 | push_user | localhost:52337 | hibernate | Sleep | 3 | | NULL |
| 113364 | push_user | localhost:57206 | hibernate | Sleep | 3 | | NULL |
| 113366 | push_user | localhost:34813 | hibernate | Sleep | 1 | | NULL |
| 113398 | push_user | localhost:37382 | hibernate | Sleep | 1 | | NULL |
| 113498 | push_user | localhost:47626 | quartz | Sleep | 12717 | | NULL |
| 113709 | push_user | localhost:59382 | hibernate | Sleep | 1 | | NULL |
| 113710 | push_user | localhost:33627 | hibernate | Sleep | 1 | | NULL |
| 113715 | hive | DataBase-02:54968 | hive | Sleep | 2390 | | NULL |
| 113716 | hive | DataBase-02:54969 | hive | Sleep | 2390 | | NULL |
| 113717 | hive | DataBase-02:54974 | hive | Sleep | 2336 | | NULL |
| 113718 | hive | DataBase-02:54975 | hive | Sleep | 2336 | | NULL |
| 113719 | push_user | localhost:48243 | hibernate | Sleep | 1 | | NULL |
| 113720 | push_user | localhost:48245 | hibernate | Sleep | 1 | | NULL |
| 113721 | push_user | localhost:48244 | hibernate | Sleep | 1 | | NULL |
| 113722 | push_user | localhost:48247 | hibernate | Sleep | 1 | | NULL |
| 113723 | push_user | localhost:48249 | hibernate | Sleep | 1 | | NULL |
| 113724 | push_user | localhost:48248 | hibernate | Sleep | 1 | | NULL |
| 113745 | push_user | localhost:50684 | hibernate | Sleep | 1 | | NULL |
| 113746 | push_user | localhost:50685 | hibernate | Sleep | 1 | | NULL |
| 113747 | push_user | localhost:50695 | hibernate | Sleep | 1 | | NULL |
| 113748 | push_user | localhost:50696 | hibernate | Sleep | 1 | | NULL |
| 113749 | push_user | localhost:50697 | hibernate | Sleep | 1 | | NULL |
| 113750 | push_user | localhost:50699 | hibernate | Sleep | 1 | | NULL |
| 113751 | push_user | localhost:50700 | hibernate | Sleep | 1 | | NULL |
| 113752 | push_user | localhost | information_schema | Query | 0 | NULL | show processlist |
| 113753 | push_user | 14.118.132.20:28688 | DW | Sleep | 396 | | NULL |
+--------+-----------+---------------------+--------------------+---------+-------+-------+------------------+
38 rows in set (0.00 sec)
或者通過如下命令查詢:
mysql> use information_schema;
mysql> select * from PROCESSLIST where info is not null;
+--------+-----------+-----------+--------------------+---------+------+-----------+--------------------------------------------------+
| ID | USER | HOST | DB | COMMAND |
TIME | STATE | INFO |
+--------+-----------+-----------+--------------------+---------+------+-----------+--------------------------------------------------+
| 113752 | push_user | localhost | information_schema | Query |
0 | executing | select * from PROCESSLIST where info is not null |
+--------+-----------+-----------+--------------------+---------+------+-----------+--------------------------------------------------+
1 row in set (0.00 sec)
㈧ Mysql學會查看sql的執行計劃
首先在Mysql的服務中有 連接器、查詢緩存(Mysql8 已經刪除)、分析器、優化器、執行器等,所有跨存儲引擎的功能都在這一層實現
而一條sql怎麼執行是由優化器決定的, 優化器是在表裡面有多個索引的時候,決定使用哪個索引;或者在一個語句有多表關聯(join)的時候,決定各個表的連接順序。
而執行計劃就是優化器優化後的sql的執行的詳細方案
Mysql中查看執行計劃的方式有兩種 : 1. 使用desc 2.使用 explain 使用它倆的效果是一樣的
接下來要通過執行計劃知道sql是怎麼執行的
執行計劃中有幾個重要的欄位, 分別是
id, table, type, possible_keys, key, key_len, Extra
id : 可以通過ID來查看在多表聯查中sql是先查詢哪張表的 id相同的從上往下依次執行,id不同的id大的先執行
table : table當然就是查詢的表名
type : 查詢的類型 查詢類型分為 ALL, index, range, ref , eq_ref, const(system), null
ALL: 指的全盤掃描,沒有走任何索引 查詢結果集大於25% 優化器可能會走全盤掃描 字元串查詢的時候一定要加"" 不然可能會全索引掃描(隱式轉換) 統計信息 失效 或者 過舊 也可能走全盤掃描 因為優化器會參考統計信息來制定執行計劃
index: 全索引掃描 就是掃描整顆索引樹
range: 索引范圍 查詢索引樹的一部分范圍 范圍索引中 > < <= >= like 的效率會比 or in 的效率高, 使用like %再前面的不走索引
ref: 輔助索引的等值查詢
當查詢的數據量小,優化器也有可能會走索引的全盤掃描 這里我就不貼圖了;
eq_ref : 多表連接查詢中,被連接的表的連接條件列是主鍵或者唯一鍵
const(system): 主鍵 或者 唯一鍵 的等值查詢
null: 沒有數據
他們的性能是依次遞增的 全盤掃描性能最差, const性能最高
possible_keys: 查詢過程中可能用到的索引
key: 真正使用到的索引
key_len: 走索引的長度
這個是怎麼計算的呢?
key_len 的計算方法 :
int 類型最長存儲4個位元組長度的數字 有not null 是4位元組 沒有的話會花1位元組存儲是不是null
tinyint 最大存儲一個位元組 也會花1位元組來判斷是不是null
字元串類型 : 字元集 utf8mb4 1-4位元組
varchar超過255會預留2個位元組存儲長度 沒超預留1個位元組
key_len 永遠是你設置的長度的最大的
聯合索引可以通過key_len 來判斷走了幾個索引
使用desc format=json select * from table 可以查看詳細情況
filtered: 索引掃描過濾掉數據的佔比
Extra: 額外的信息
Using filesort :MySQL 對數據在sql層進行了排序,而不是按照表內的索引進行排序讀 取。 效率比較低
Using temporary :使用臨時表保存中間結果,也就是說 MySQL 在對查詢結果排序時使用了臨時表,常見於order by 或 group by。
Using index :表示 SQL 操作中使用了覆蓋索引(Covering Index),避免了訪問表的數據行,效率高。
Using index condition :表示 SQL 操作命中了索引,但不是所有的列數據都在索引樹上,還需要訪問實際的行記錄。
Using where :表示 SQL 操作使用了 where 過濾條件。
Select tables optimized away :基於索引優化 MIN/MAX 操作或者 MyISAM 存儲引擎優化 COUNT(*) 操作,不必等到執行階段再進行計算,查詢執行計劃生成的階段即可完成優化。
Using join buffer (Block Nested Loop) :表示 SQL 操作使用了關聯查詢或者子查詢,且需要進行嵌套循環計算