當前位置:首頁 » 編程語言 » mysql查看執行過的sql
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

mysql查看執行過的sql

發布時間: 2023-03-24 03:53:22

㈠ 如何查看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 操作使用了關聯查詢或者子查詢,且需要進行嵌套循環計算