为查询缓存优化你的查询大多数的 MySQL 服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被 MySQL 的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。这里最主要的问题是,对于程序员来说,这个事情是很容易被忽略的。因为,我们某些查询语句会让 MySQL 不使用缓存。MySQL 的查询缓存对这个函数不起作用。所以...
你可能需要使用 MySQL 全文索引 或是自己做一个索引(比如说:搜索关键词或是 Tag 什么的)
# 前言在某些特定的问题排查场景下,或者需要复现问题,我们可能需要开启general log 来查看 MySQL 实时运行的 SQL 语句,以此来缩小问题的范围。general log 会记录所有的SQL语句,无论语句是否正确执行或者是由于语法错误而终止执行。同时开启 general log 在实例负载比较大的情况下了能会对服务器性能产生影响,这里推荐一个好用的工具,它基于 MySQL 协议的抓包工具,实时抓取 MySQL Server 端的请求,并格式化输出。# 工具安装##...
# 前言在某些特定的问题排查场景下,或者需要复现问题,我们可能需要开启general log 来查看 MySQL 实时运行的 SQL 语句,以此来缩小问题的范围。general log 会记录所有的SQL语句,无论语句是否正确执行或者是由于语法错误而终止执行。同时开启 general log 在实例负载比较大的情况下了能会对服务器性能产生影响,这里推荐一个好用的工具,它基于 MySQL 协议的抓包工具,实时抓取 MySQL Server 端的请求,并格式化输出。# 工具安装...
本文介绍云数据库 MySQL 版为数据库版本 MySQL 8.0 提供的可修改参数,以及参数的默认值、修改后是否需要重启和取值范围。 序号 参数名 参数默认值 是否需要重启 取值范围 1 auto_increment_increment 1 否 [1-65535] 2 auto_increment_offset 1 否 [1-65535] 3 automatic_sp_privileges ON 否 [ONOFF] 4 avoid_temporal_upgrade OFF 否 [ONOFF] 5 back_log 3000 是 [0-65535] 6 binlog_cache_size 2097152 否 [4096-16777216] 7 ...
# 问题描述 MySQL 5.7 的 SQL Modes 对 SQL 的检查更加严格和规范,会出现一些 SQL 兼容性问题。 # 问题分析 具体常见的问题包含以下几个方面:## 1.SQL查询的字段不包含在GROUP BY 语句中(ONLY_FULL_GROUP_BY)如果**SELECT**的字段与**GROUP BY**的字段不匹配,那么就会报错如下: ```MySQL [dbtest]> select min(update_time),name,id from tb_author group by name;ERROR 1055 (42000): Expression #3 of SELEC...
# 问题描述MySQL 5.7 的 SQL Modes 对 SQL 的检查更加严格和规范,会出现一些 SQL 兼容性问题。# 问题分析具体常见的问题包含以下几个方面:## 1.SQL查询的字段不包含在GROUP BY 语句中(ONLY_FULL_GROUP_BY)如果**SELECT**的字段与**GROUP BY**的字段不匹配,那么就会报错如下:````undefinedMySQL [dbtest]> select min(update_time),name,id from tb_author group by name;ERROR 1055 (42000): Expression #3 of SELECT li...
# 前言内存指标是 RDS for MySQL 最重要的指标之一,不合理的参数配置,待优化的 SQL 可能导致内存利用率持续升高,严重时会导致实例 OOM,进而导致主从切换。本文从参数的角度分析 MySQL 内存的组成部分。# session 级别独享内存session 级别的独享内存是分配给每个连接私有的内存,执行如下命令,可以看到独享内存的分配情况````undefinedshow variables where variable_name in ('thread_stack', 'read_buffer_size','read_rn...
# 问题描述参数组的max_connections 与 mysql.user 表中的 max_connections 以及 max_user_connections 谁的优先级更高?# 问题分析## 参数组中的max_connectionsmax_connections 是一个全局的概念,意味着服务器所能承受的最大连接数,针对所有用户。比如设置为2000,意味着这个实例的最大连接数只能到达2000。```sqlmysql> show variables like 'max_connections';+-----------------+-------+| Variable_name | Va...
# 前言MySQL 中的优化器是基于成本的优化器(CBO),所谓基于成本,代表着运行目标 SQL 语句需要消耗的 CPU,扫描行数,IO 等,这些信息是基于统计信息来获得的。如果统计信息不准确,优化器很可能选择那些不够优化,甚至是错误的执行计划。对于统计信息的搜集方式有两种:1. 非持久化统计信息2. 持久化统计信息# 非持久化统计信息所谓的非持久化统计信息,指的是统计信息没有持久化到磁盘上,如果数据库重启,统计信息将全部丢失。设...
# 问题描述MySQL 出现如下报错:我该如何去排查并解决此问题ERROR 1461 (42000): Can't create more than max_prepared_stmt_count statements (current value: 16382)# 问题分析使用sysbench进行压力测试:```bash[root@iv-38der6cb2agc9tvqv0qf ~]# sysbench --db-driver=mysql --mysql-host=rds-mysql-h28a****.rds.ivolces.com --mysql-port=3306 --mysql-user=*** --mysql-password=******** --mysql-db=sbtest1 -...
# 前言在日常学习以及工作中,为了更方便的测试多个数据库版本之间的功能差异,我们会装不同版本的实例,通常使用二进制安装的大致步骤如下:1. 创建相关目录2. 初始化 MySQL3. 启动 MySQL4. 如果有配置主从的需求,还需要额外的命令整个配置过程如果通过几条命令完成,会大大减少我们的工作量。这里介绍 dbdeployer 工具,它有如下优点:1. 工具安装方便,可以迅速安装和使用不同版本的数据库。2. 配置主从,MGR 集群非常方便,...
# 问题描述参数组的max_connections 与 mysql.user 表中的 max_connections 以及 max_user_connections 谁的优先级更高?# 问题分析## 参数组中的max_connectionsmax_connections 是一个全局的概念,意味着服务器所能承受的最大连接数,针对所有用户。比如设置为2000,意味着这个实例的最大连接数只能到达2000。```sqlmysql> show variables like 'max_connections';+-----------------+-------+| Variable_name | Value |...