ProxySQL查询重写使用示例

  

在这篇文章中,我将重新探究ProxySQL中的<代码>查询重写代码>   

为什么我们需要重写查询吗?

  
      <李>你已经确定了一个触发性能瓶颈或导致系统缓慢的查询李   <李>你无法(快速的)修改应用代码李   <李>某些特殊的操作需要“重定向查询”   
  

这儿举例你作为DBA发现了一个“坏查询”,你确认是它导致了服务缓慢,并且可能会导致服务不可用。那这个查询必须被优化,你和开发沟通要修正这个SQL,但是开发反馈回来的信息是能改,但是由于技术的非技术的种种原因吧,没有那么快。这时你怎么办,等着?显然不能,你可以在开发完成修正之前通过ProxySQL的<代码>查询重写代码>   

如何重写查询?通过ProxySQL有两种方式来完成(译者注:其实应该理解为两种匹配查询的方式)。

  

查询重写其实就是通过<代码> mysql_query_rules 表中一个<代码> match_pattern + replace_pattern> match_digest> match_digest 和<代码>用户名,<代码> schemaname ,<代码> proxy_addr>   

这两种不同的机制为不同的查询类型(例如DML操作,选择等)提供了灵活高效匹配方式。注意如果你希望重写查询,那么规则中的<代码> match_pattern>   

<强>下面是我们如何在我们的测试环境演示<代码> match_digest

  
 <代码> mysql>选择hostgroup hg、sum_time count_star, digest_text stats_mysql_query_digest ORDER BY sum_time DESC限制10;
  + - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
  | hg | sum_time | count_star | digest_text |
  + - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
  | 0 | 85710 | 243549572 |选择c从sbtest10 id=?|
  | 0 | 42856 | 146324255 | |
  | 0 | 44310 | 126643488 |选择c从sbtest7 id=?|
  | 0 | 42927 | 126517140 | |开始
  | 0 | 43820 | 123797307 |选择c从sbtest1 id=?|
  | 0 | 43460 | 123345775 |选择c从sbtest6 id=?|
  | 0 | 43010 | 122121030 |选择c从sbtest9 id=?|
  | 0 | 42400 | 121245265 |选择c从sbtest8 id=?|
  | 0 | 42520 | 120554811 |选择c从sbtest3 id=?|
  | 0 | 42070 | 119244143 |选择c从sbtest5 id=?|
  + - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
  10行集(0.00秒)
  mysql>插入mysql_query_rules (rule_id、活跃用户名、match_digest match_pattern, replace_pattern,适用)值(10 1‘根’,”选择。* id=哪里?”、“sbtest2”、“sbtest10 ', 1);
  查询好了,1行影响(0.00秒)
  mysql>负载MYSQL查询规则运行时;
  查询好,0行影响(0.00秒)
  mysql>选择支安打、mysql_query_rules.rule_id消化,活跃,用户名、match_digest, match_pattern, replace_pattern cache_ttl,应用从mysql_query_rules自然加入统计数据。由mysql_query_rules.rule_id stats_mysql_query_rules秩序;
  + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - +
  |打| rule_id | | |活跃用户名消化| match_digest | match_pattern | replace_pattern | cache_ttl | |
  + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - +
  零| 1 | 0 | 10 | | |选择。* id=?| sbtest2 | sbtest10零| 1 | |
  + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - +
  1行集(0.00秒)
  mysql>选择支安打、mysql_query_rules.rule_id消化,活跃,用户名、match_digest, match_pattern, replace_pattern cache_ttl,应用从mysql_query_rules自然加入统计数据。由mysql_query_rules.rule_id stats_mysql_query_rules秩序;
  + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - +
  |打| rule_id | | |活跃用户名消化| match_digest | match_pattern | replace_pattern | cache_ttl | |
  + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - +
  零| | 593 | | 1 | |选择。* id=?| sbtest2 | sbtest10零| 1 | |
  + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - +
  1行集(0.00秒)

ProxySQL查询重写使用示例