閱讀366 返回首頁    go 京東網上商城


【新特性】MySQL5.7新特性query_rewrite 插件

一。使用場景
在業務繁忙並且緊急上線,對就是那種特別繁忙,又不能停的那種。在係統不忙的時候 明明跑的很好。**但是**一旦業務繁忙,造成業務阻塞。當查看MySQL的滿查詢日誌中發現大量慢查詢日誌,(不是單單加索引就能搞定的哦)。這時候怎麼辦,難道怒對開發一頓,這時候你需要MySQL5.7新特性query_rewrite _Plugin插件了。
二。安裝配置插件
2.1安裝

[root@localhost share]# /usr/local/mysql/bin/mysql -u root -p < install_rewriter.sql 
Enter password: 
[root@localhost share]# pwd
/usr/local/mysql/share

驗證


"root@localhost:mysql.sock  [(none)]>show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| query_rewrite      |
| sys                |
+--------------------+

安裝完成了 似不似很簡單呢~QAQ~

2.2配置一發

"root@localhost:mysql.sock  [(none)]>use query_rewrite;
Database changed
"root@localhost:mysql.sock  [query_rewrite]>show tables;
+-------------------------+
| Tables_in_query_rewrite |
+-------------------------+
| rewrite_rules           |
+-------------------------+

查看rewrite_rules表,表結構大概是這樣的


CREATE TABLE `rewrite_rules` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `pattern` varchar(10000) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `pattern_database` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `replacement` varchar(10000) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `enabled` enum('YES','NO') CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT 'YES',
  `message` varchar(1000) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `pattern_digest` varchar(32) DEFAULT NULL,
  `normalized_pattern` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

id :規則id ,此列是表的主鍵。
pattern:需要改寫的源SQL
pattern_database:需要改寫的DB名稱
replacement:指定改寫後的樣子
enabled:是否啟用

2.3舉個栗子

CREATE TABLE `aa` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
"root@localhost:mysql.sock  [aa]>insert into aa values (1,'a');
"root@localhost:mysql.sock  [aa]>insert into aa values (2,'a');     

在query_rewrite中修改規則

"root@localhost:mysql.sock  [aa]>insert into query_rewrite.rewrite_rules(pattern, replacement, pattern_database) values (
    -> "select * from aa ","select * from aa where id=1", "aa");

"root@localhost:mysql.sock  [aa]>call query_rewrite.flush_rewrite_rules(); #加載一下

驗證

root@localhost:mysql.sock  [aa]>select * from aa;
+------+------+
| id   | name |
+------+------+
|    1 | a    |
+------+------+

是不是感覺很神奇呢,對於那種SQL隱式轉換啦,強製走個索引啦 子查詢的優化啦 等等等等 。尤其是係統繁忙來不及修改程序 來不及修改SQL的時候。真的能夠救你的係統一命哦。如果你想讓某個SQL變慢哦,讓某個程序員背鍋也是可以的哦。。

三.總結
建議多關注一下MySQL的新特性。不知不覺就能使用到,有效提升和改善業務環境。

最後更新:2017-09-14 21:32:45

  上一篇:go  60年後的你長什麼樣?人臉老化三大技術探秘
  下一篇:go  Intellij IDEA 快捷鍵整理(TonyCody)