后端工程师的高阶面经
邓明
前 Shopee 高级工程师,Beego PMC
6888 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 50 讲
后端工程师的高阶面经
15
15
1.0x
00:00/00:00
登录|注册

21|数据库综合应用:怎么保证数据库的高可用、高性能?

分库分表中特殊查询的处理
分库分表中的事务问题
主键生成策略
分库分表键选择
数据迁移
容量规划
分库分表方案
主从自动切换
读写分离方案
query_cache_min_res_unit
innodb_buffer_pool_instances
innodb_buffer_pool_size
其他适合面试的参数调优案例
query_cache_limit的调整
分库分表
读写分离
参数优化
查询优化
分库分表
读写分离
参数调优
查询缓存的最佳使用场景
查询缓存的效果
思考题
面试思路总结
面试准备
查询缓存
数据库综合应用:怎么保证数据库的高可用、高性能?

该思维导图由 AI 生成,仅供参考

你好,我是大明。
我很早就注意到,很多人在平时工作中就是设计一下表结构和索引。好一点的可能还会有一些查询优化的经验,也有少数人做了很多跟数据库有关的事情,但是没办法把它们系统组织起来,给面试官留下深刻印象。
现在我们有了前面几节课的基础之后,就可以把这些知识串联起来,做成一整个提高数据库性能和可用性的方案。在这之前,为了方便你理解后面的方案,我们先来学习一下查询缓存相关的知识。

查询缓存

在 MySQL 里面,允许用户开启查询缓存。你可以理解这个缓存就是用 SQL 作为键,而对应的查询结果集就是值。如果下次过来的还是同一个查询,那么就直接返回缓存起来的查询结果集。
但是查询缓存不一定带来查询性能提升。如果你的查询每一次对应的 SQL 都不一样,那么查询缓存反而会降低查询性能。
在实践中查询缓存的效果的确不怎么好。按照设计者的想法,查询缓存的最佳使用场景是一些特别复杂的查询,它们会扫描很多行,但是只有一小部分行满足条件。所以 MySQL 在 8.0 的时候移除了这个功能。

面试准备

为了面好数据库这部分内容,你还需要在公司内部搞清楚一些数据和信息。
我后面提到的各种参数是否有改进的空间,记住公司里每一个使用了非默认值的参数。
如果你所在公司有 DBA,那么可以请教一下 DBA,有没有针对公司的业务做过什么优化,包括数据库自身的优化,也包括数据库所在的操作系统的优化。如果你和他们的私人关系够好,那么可以请教一下他们之前遇到过的各种数据库问题,然后把这些问题整理成案例,在面试中使用。
如果你所在公司的文档比较齐全,那么可以了解一下数据库架构的演进。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了数据库综合应用中的高可用和高性能保障策略,包括查询缓存的实践效果、面试准备建议、参数调优、读写分离和分库分表案例。文章提出了面试中可能涉及的问题和最佳策略,并给出了整体方案的建议,适合数据库从业者参考。具体内容包括查询缓存的效果案例、读写分离的实施步骤和主从自动切换机制的应用,以及分库分表方案的介绍和应对事务问题的解决方案。文章还提到了参数调优的重要性和具体参数的调整建议,以及如何在面试中应对相关问题。总体来说,本文提供了丰富的数据库性能优化和面试准备方面的建议,适合数据库从业者参考。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《后端工程师的高阶面经》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(7)

  • 最新
  • 精选
  • nadream
    go开发能用ShardingSphere吗?

    作者回复: 你可以把它部署为网关形态。

    2024-01-22归属地:浙江
  • sheep
    innodb_buffer_pool_instances每个buffer pool之间存的都是不一样的数据吧?

    作者回复: 是的。

    2023-11-15归属地:广东
  • 我好像一点都不像程序员
    以前在小公司的时候,还可以玩玩MySQL参数的调优,现在,直接用的都是阿里云的云数据库,啥也动不了,哈哈哈,文中提到异地多活,我看到一篇很好的文章,分享一下给大家:https://baijiahao.baidu.com/s?id=1714292603624190772&wfr=spider&for=pc

    作者回复: 赞!我记得,阿里云好像也可以调吧?嘿嘿,就看你敢不敢了。

    2023-08-26归属地:广东
  • humor
    innodb_buffer_pool_instances,这个参数为什么能减轻竞争呢,如果它的值设置为2,跟设置为1的区别是什么呢?我理解就算用一个缓冲池,每一页的数据都是分开的,也不会有什么竞争吧。如果两个缓冲池都是缓存全量数据,还会有数据一致性的问题。

    作者回复: 你可以认为每个 buffer pool 里面都有一大堆的数据结构,这些数据结构都需要用锁保护起来。如果只有一个,那么就大家都在等一个锁;如果有两个,那么就可以有两个查询同时拿到锁。 虽然每一页的数据都是分开的,没什么竞争。但是你找到这个页,把这个页放进去缓存的过程,是需要竞争的。

    2023-08-03归属地:浙江
  • peter
    请教老师两个问题: Q1:单机MySQL最大连接数一般为多少? 留言里一位朋友说设置了六千,可能吗?难道机器硬件配置非常高吗? Q2:tomcat连接数与CPU核数的矛盾问题。 tomcat服务器一般能够支持500个连接,一个连接一个线程,那就是500个线程。但一般服务器的CPU核数也就是10个左右。线程的数量一般是核数的2倍,也就是20个,怎么会开启500个线程呢?

    作者回复: 1. 都跟你机器性能有关的,也跟你的查询有关。所以最好就还是自己先测试一下,当然这些数据都是 DBA 配置好的,你直接问他们就行。 2. tomcat 已经很久没研究了,超纲了。

    2023-08-03归属地:北京
    2
  • ZhiguoXue_IT
    第一问: 1)调大 query_cache_limit 参数可以在一些情况下提升查询缓存的效果。增加 query_cache_limit 可能会增加缓存的利用率 2)调小 query_cache_limit 参数,适当减小 query_cache_limit 可以减少缓存内碎片的产生,提高缓存的效率 也就是说针对你的业务场景数据,如果业务数据大,适当调大些,如果都是平均,调的太大会出现内存碎片,浪费内存空间 第二问: innodb_log_file_size 和 innodb_log_buffer_size: 存储引擎的事务日志,存储更大的事务日志 max_connections: 最大并发连接数,我们当时最早涉及的一个数据库,因为是老项目,涉及的业务比较多,机器也比较多,所以我们配置的最大连接数特别高,当时记得是6000

    作者回复: 震惊!6000!我好像还没见过调到这么大的。长见识了

    2023-08-02归属地:北京
  • Geek_9af983
    我们有一个数据库开启了查询缓存限制query_cache_limit,一开始默认大小是1MB,发现存储了很多没用的缓存,还导致缓存较满,利用效果不佳,后来仔细排查了几个需要缓存的sql数据,看了下返回结果,调整到128KB之后,有很高效利用到缓存效果

    作者回复: 厉害!

    2023-08-02归属地:北京
收起评论
显示
设置
留言
7
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部