暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
Halo 关于锁等待监控与解决建议.pdf
116
5页
2次
2024-12-04
免费下载
在数据库管理的日常工作中,我们经常会遇到数据库性能下降的问题。本
文将围绕 Halo 数据库的性能优化展开,帮助读者理解常见性能问题的成因,并
提供实用的解决建议。
数据库性能问题的常见原
硬件资源不足:数据库服务器的 CPU、内存、磁盘 I/O 等硬件资源不足
是性能问题的常见原因。当硬件资源达到瓶颈时,数据库的性能会明显
下降。
查询优化不足:复杂的查询语句、缺乏合适的索引、大量的子查询和联
合查询等都可能导致查询性能下降。
并发连接过多:当数据库面临大量的并发连接时,如果连接池大小设置
不当,可能导致性能下降。
导致事务执行延迟,从而影响数据库的整体性能。
其中锁的争用是日常业务中常见的问题。
锁存在的意
每当多个会话同时访问数据库的同一数据时,理想状态是为所有的会话提供
高效的访问,同时还要维护严格的数据一致性。这个数据的一致性通过什么来
维护呢?
MVCC: 每个 SQL 语句看到的都只是当前事务开始的数据快照,而不是底层
数据的当前状态。这样可以保护语句不会看到可能由其他相同数据行上执行更
新的并发事务造成的不一致的数据,为每一个数据库会话提供事务隔离。MVCC
避免了传统的数据库的锁定方法,将通过锁争夺最小化的方法来达到多会话并
发访问时的性能最大化的目的。
Halo 提供了多种锁模式用于控制对表中的数据的并发访问,其中最主要的是
表级锁与行级锁,此外还有页及锁和咨询锁等等,接下来主要介绍表级锁与行
级锁。
表级锁
ACCESS SHARE SELECT
锁。通常,任何只读取表而不修改它的查询都将获得这种锁模式。
ROW SHARESELECT FOR UPDATE SELECT FOR SHARE 命令在
目标表上取得一个这种模式的锁 FOR
UPDATE/FOR SHARE 的任何其他表上的 ACCESS SHARE 锁)。
ROW EXCLUSIVE:命令 UPDATEDELETE INSERT 在目标表上取得
这种锁模式(加上在任何其他被引用表上的 ACCESS SHARE 锁)。通
常,这种锁模式将被任何修改表中数据的命令取得。
SHARE UPDATE EXCLUSIVE:由 VACUUM(不带 FULL)、ANALYZE
CREATE INDEX CONCURRENTLYREINDEX CONCURRENTLY
CREATE STATISTICS 以及某些 ALTER INDEX ALTER TABLE 的变体
获得(详细内容请参考这些命令的文档)
SHARE:由 CREATE INDEX(不带 CONCURRENTLY)取得。
SHARE ROW EXCLUSIVE:由 CREATE TRIGGER 和某些形式的 ALTER
TABLE 所获得。
EXCLUSIVE:由 REFRESH MATERIALIZED VIEW CONCURRENTLY
得。
ACCESS EXCLUSIVE:由 ALTER TABLEDROP TABLE
TRUNCATEREINDEXCLUSTERVACUUM FULL REFRESH
MATERIALIZED VIEW(不带 CONCURRENTLY
式的 ALTER INDEX ALTER TABLE 也在这个层面上获得锁(见
ALTER TABLE(7) LOCK TABLE 命令的
默认锁模式。
表级锁一旦被获取,一个锁通常将被持有直到事务结束。但是如果在建立保存
点之后才获得锁,那么在回滚到这个保存点的时候将立即释放该锁。这与
ROLLBACK 取消保存点之后所有的影响的原则保持一致。同样的原则也适用于
PL/pgSQL 异常块中获得的锁:一个跳出块的错误将释放在块中获得的锁。
下表 13.2 冲突的锁模式
of 5
免费下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜