SQL拦截是一个比较有用的高级技巧,用户可以写一个java类,将传入MyCAT的SQL进行改写然后交给Mycat去执行,此技巧可以完成如下一些特殊功能:
- 捕获和记录某些特殊的SQL
- 记录sql查找异常
- 出于性能优化的考虑,改写SQL,比如改变查询条件的顺序或增加分页限制
- 将某些Select SQL强制设置为Read 模式,走读写分离(很多事务框架很难剥离事务中的Select SQL
- 后期Mycat智能优化,拦截所有sql 做智能分析,自动监控节点负载,自动优化路由,提供数据库优化建议
SQL拦截的原理是在路由之前拦截SQL,然后做其他处理,完了之后再做路由,执行,如下图所示:
默认的拦截器实现了Mysql转义字符的过滤转换,非默认拦截器只有一个拦截记录sql的拦截器。
a. 默认SQL拦截器:
配置:
<system>
<property name="sqlInterceptor">org.opencloudb.interc