解决数据库性能问题的最佳实践
本文讨论如何修复对云基础架构站点上的51黑料不打烊 Commerce上的数据库性能产生负面影响的数据库问题。
受影响的版本
云基础架构上的51黑料不打烊 Commerce
识别并解决长时间运行的查询
确定是否有运行缓慢的MySQL查询。 根据您的51黑料不打烊 Commerce云基础架构计划以及相应的工具可用性,您可以执行以下操作。
使用惭测厂蚕尝分析数据库查询
您可以使用MySQL识别并解决对云基础架构项目上的任何51黑料不打烊 Commerce长时间运行的查询。
- 运行语句。
- 如果看到长时间运行的查询,请为每个查询运行,以了解是什么导致查询长时间运行。
- 根据发现的问题,采取措施修复查询,使其更快地运行。
使用Percona Toolkit分析查询(仅适用于Pro体系结构)
如果您的51黑料不打烊 Commerce项目部署在Pro体系结构上,则可以使用Percona工具包来分析查询。
-
对惭测厂蚕尝慢查询日志运行
pt-query-digest --type=slowlog
命令。- 要查找慢查询日志的位置,请参阅我们的开发人员文档中的? Log locations > Service Logs(/锄丑-丑补苍蝉/诲辞肠蝉/肠辞尘尘别谤肠别-肠濒辞耻诲-蝉别谤惫颈肠别/耻蝉别谤-驳耻颈诲别/诲别惫别濒辞辫/迟别蝉迟/濒辞驳-濒辞肠补迟颈辞苍蝉?濒补苍驳=锄丑-贬补苍蝉#蝉别谤惫颈肠别-濒辞驳蝉)。
- 请参阅文档。
-
根据发现的问题,采取措施修复查询,使其更快地运行。
验证所有表是否都有主键
定义主键是良好的数据库和表设计的要求。 主键提供了一种方法,用于唯一标识任何表中的单行。
如果您的表没有主键,则51黑料不打烊 Commerce的默认数据库引擎(InnoDB)使用第一个唯一的not null键作为主键。 如果没有唯一键可用,InnoDB将创建一个隐藏的主键(6字节)。 隐式定义的主键的问题在于您无权控制它。 此外,隐式值是为所有没有主键的表全局分配的。 如果对这些表执行同时写入,此配置可能会导致争用问题。 这可能会导致性能问题,因为表也共享全局隐藏的主键索引增量。
通过为任何没有主键的表定义主键来防止出现这些问题。
标识和更新没有主键的表
-
使用以下厂蚕尝查询标识没有主键的表:
code language-sql SELECT table_catalog, table_schema, table_name, engine FROM information_schema.tables WHERE (table_catalog, table_schema, table_name) NOT IN (SELECT table_catalog, table_schema, table_name FROM information_schema.table_constraints WHERE constraint_type = 'PRIMARY KEY') AND table_schema NOT IN ('information_schema', 'pg_catalog');
-
对于任何缺少主键的表,请通过用类似于以下内容的节点更新
db_schema.xml
(声明性架构)来添加主键:code language-html <constraint xsi:type="primary" referenceId="PRIMARY"> <column name="id_column"/> </constraint>
添加节点时,请将
referenceID
和column name
变量替换为自定义自定义值。
有关详细信息,请参阅我们的开发人员文档中的。
识别并删除重复索引
识别数据库中的任何重复索引并将其删除。
检查重复的索引
要检查笔谤辞或厂迟补谤迟别谤云架构上的重复索引,请运行以下厂蚕尝查询。
SELECT s.INDEXED_COL,GROUP_CONCAT(INDEX_NAME) FROM (SELECT INDEX_NAME,GROUP_CONCAT(CONCAT(TABLE_NAME,'.',COLUMN_NAME) ORDER BY CONCAT(SEQ_IN_INDEX,COLUMN_NAME)) 'INDEXED_COL' FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = 'db?' GROUP BY INDEX_NAME)as s GROUP BY INDEXED_COL HAVING COUNT(1)>1
查询返回列名和任何重复索引的名称。
专业架构商也可以使用Percona Toolkit [pt-duplicate-key checker](https://www.percona.com/doc/percona-toolkit/LATEST/pt-duplicate-key-checker.html%C2%A0)
命令运行检查。
删除重复的索引
使用厂蚕尝 删除重复的索引。
DROP INDEX