云数据库RDS

    代理实例使用限制

    读写分离原则

    • 事务、写请求或同一个session写请求之后一段时间(默认200ms)内的读,会发往主库
    • 读写分离不保证非事务读的一致性,业务上有一致性需求的查询,请封装到事务

    对业务要求

    • 业务有连接探活或超时机制。超时时间为:前端超时时间 < 代理超时时间 < MySQL超时时间
    • 业务端有重试机制

    暂不支持功能

    • 不支持通过代理实例执行DDL语句
    • 不支持注释路由相关功能
    • 不支持通过代理实例调用存储过程
    • 不支持old_password=ON
    • 不要用select执行带有些操作的SQL,因为会被发往从库执行
    • set autocommit语句只支持set autocommit=1/0,不支持set autocommit=on/off

    不推荐使用的功能

    • 如下命令的执行结果具有随机性,会根据执行时所连接的实例返回响应结果:show processlist、show master status、show slave status
    • 不推荐客户端使用连接池功能,因为代理实例已经提供了连接池
    • 不推荐长连接中使用prepare,因为cpu使用率偏高,会有性能下降
    • 不保证上下文相关函数的正确性,这些函数包括row_count、last_insert_id等。这些函数建议用编程语言的客户端API代替,如C和PHP的API中mysql_affect_rows函数可以代替row_count,mysql_insert_id函数可以代替last_insert_id

    其他

    • 针对found_rows函数,目前dbproxy支持增加SQL_CALC_FOUND_ROWS标识的方式 SELECT SQL_CALC_FOUND_ROWS … from …,并且found_rows只有紧跟SELECT SQL_CALC_FOUND_ROWS … from …后发送有效。
    • 字段名/字段值可能被识别为for update/lock in share mode关键词,而发往主库
    • 字段名/字段值含有分号会被作为multiquery发往主库处理
    • for update/lock in share mode,严格匹配关键词,多余空格可能会导致无效而发往从库
    上一篇
    数据安全最佳实践
    下一篇
    实例负载过高如何处理