
数据库
文章平均质量分 62
Good LA
这个作者很懒,什么都没留下…
展开
-
数据库慢查询导致接口大面积性能下降
背景从监控pinpoint中看到业务高峰期,接口响应时间呈现一柱擎天的姿势。分析数据库监控cpu打满、内存使用了80%,数据库连接使用了80左右,配置了800,存在大量空闲。查看慢sql日志,发现慢sql数量飙升。接口监控大量接口在getConnection()时消耗了大部分时间。查看数据库连接配置发现数据库配置了最大20的连接数。超时时间20s。原因慢sql导致大量请求阻塞在获取druid连接资源上。解决方案增加数据库配置,调整成8c16g。因为调整了最大连接数,数据库压力可原创 2022-04-07 19:03:38 · 2283 阅读 · 0 评论 -
mysql之sql优化实践汇总
概述未来的SQL优化实践汇总都总结在本文。使用limit对索引优化其中priTmplId 模板ID为索引,不唯一,但是关联的openId唯一explain update wx_subscribe_user set sendTimes = sendTimes + 1 where openId = "oT10x5Gkfb5R-3HZ1Vb1KAlPoq2M" and priTmplId = "hEVQfvr-S2PlJp7SxqZT7ijc3l_xMnvIAiUozcvUgyq"执行计划type原创 2021-12-28 11:11:05 · 778 阅读 · 0 评论 -
从数据库随机遍历数据的一次实践
背景根据条件,每天给每个用户推荐十名合适的用户(用户当天第一次登录时触发),已经推荐过的不允许再次推荐。每天定时给设置了允许自动推荐的用户跑推荐逻辑。要求被推荐人具备随机性,否则有些人每天被重复推荐多次,有些人虽然满足条件却长时间遍历不到。其它解决方案以及利弊采用mysql的随机排序函数,每次查出来的数据都不一致,因此达到随机性。缺点采用随机排序的方式,可能会有部分数据始终遍历不到,无法做到极端情况下将所有用户数据都遍历一遍,因此得到的遍历结果如果不满足十人,并不能表示没有十人满足推荐要求。原创 2021-08-25 15:59:22 · 358 阅读 · 0 评论 -
MYSQL之SQL优化一
背景创建字段和索引都是一样的test1和test2表。id主键、age普通索引、id_card唯一索引、name无索引。执行计划通过explain可以查看sql的索引命中情况。因为即使where条件包含了索引,也不一定会命中索引。因此我们假设where条件总是能命中索引。typetype有以下几个值,性能而言,可以认为system>const>eq_ref>ref>range>index>ALL。System:指系统表的查询,仅有一行的记录。,一般用不到原创 2021-06-21 18:42:00 · 4156 阅读 · 6 评论 -
数据库常用sql操作之时间
不同的时间函数select TO_DAYS('2021-06-21'), TO_DAYS( '2021-06-20'), NOW(), curdate(), curtime()筛选距离今天少于一天的数据select createTimefrom userwhere TO_DAYS(NOW()) - TO_DAYS(createTime) <= 1group by createTime原创 2021-06-21 15:20:32 · 315 阅读 · 0 评论 -
MVCC的庐山真面目
概念MVCC,全称Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。使用MVCC的好处多版本并发控制(MVCC)是一种用来解决读-写冲突的无锁并发控制,在并发读写数据库时,可以做到在读操作时不用阻塞写操作,写操作也不用阻塞读操作,提高了数据库并发读写的性能。同时还可以解决脏读,幻读,不可重复读等事务隔离问题,但不能解决更新丢失问题(后面解释)。注意本文原创 2021-01-03 18:03:39 · 336 阅读 · 0 评论 -
DISTINCT实践
DISTINCT在Mysql中表示对整个select结果集记录过滤去重,而不是对某个字段去重。场景一张学生成绩表中,一个学生可以有0到多门成绩。现在需要统计有多少学生参加了考试。SELECT distinct nameFROM COURSE现在统计参加考试的学生中,成绩最低的分数是多少分SELECT DISTINCT NAME, SCOREFROM COURSEWHERE ...原创 2021-01-02 23:45:22 · 120 阅读 · 0 评论 -
LEFT JOIN的细节
概念left join左连接以左表为主表,连接右表,如果右表为空,也能正常连接。假设主表有十条数据,那么得到的结果最少有十条。sqlSELECT df1.tradeNo, t.tradeNo, t.*FROM distribute_friend df1 LEFT JOIN trade t on df1.tradeNo=t.tradeNO结果分析id和activity可以为空在理解范围之内,但是tradeNo(1)为什么也为空?在sql里面,LEFT JOIN trade t on原创 2020-12-29 13:36:16 · 138 阅读 · 0 评论