专注,勤学,慎思。戒骄戒躁,谦虚谨慎

just do it

导航

2022年4月4日 #

PostgreSQL执行计划:Bitmap scan VS index only scan

摘要: 之前了解过postgresql的Bitmap scan,只是粗略地了解到是通过标记数据页面来实现数据检索的,执行计划中的的Bitmap scan一些细节并不十分清楚。这里借助一个执行计划来分析bitmap scan以及index only scan,以及两者的一些区别。这里有关于Bitmap sca 阅读全文

posted @ 2022-04-04 14:19 MSSQL123 阅读(2291) 评论(0) 推荐(0) 编辑

2021年8月15日 #

MySQL中的显式锁---MySQL用户级锁函数

摘要: 类似于postgresql的咨询锁,MySQL也有用户级锁函数,是一个比较有意思的东西,之前都没有注意过。优点:其特点是使用起来更加灵活与个性,相比MySQL隐式的行级锁不同,用户级锁函数使用的可控性更强,可以个性化指定“锁的名称”和锁的过期时间,以及探测锁的可用性等。缺点:与传统的隐式锁不同的是, 阅读全文

posted @ 2021-08-15 10:52 MSSQL123 阅读(464) 评论(0) 推荐(0) 编辑

2021年8月3日 #

使用Python装饰器的tenacity库实现异常重试机制

摘要: Python异常重试如果某些方法需要重试,之前都是自己在except里写代码,很多时候实现起来并不方便,而且复杂逻辑下大大增加代码量和影响可读性,尝试了一下tenacity库,重试机制非常简单易用且清晰,且比retrying库简洁很多。1,第一种常规方式,不借助第三方库,需要自行再except里写代 阅读全文

posted @ 2021-08-03 12:09 MSSQL123 阅读(316) 评论(0) 推荐(0) 编辑

2020年12月23日 #

Redis 6.0 多线程性能测试结果及分析

摘要: 单线程的Redis一向以简洁高效著称,但也有其阿喀琉斯之踵:阻塞!单个线程在最容易产生瓶颈的网络读写(Redis大key,也包括其他一些重量级的操作sort/sunion/zunionstore/sdiff,集中性的expired key清理,内存溢出的maxmemory-policy策略等)请求完 阅读全文

posted @ 2020-12-23 20:45 MSSQL123 阅读(3874) 评论(2) 推荐(4) 编辑

2020年12月4日 #

在Postgre中设置max_connections时,为什么需要使用连接池 (译)

摘要: 原文地址:https://www.enterprisedb.com/postgres-tutorials/why-you-should-use-connection-pooling-when-setting-maxconnections-postgres PostgreSQL是“世界上最先进的开源数 阅读全文

posted @ 2020-12-04 19:07 MSSQL123 阅读(4121) 评论(0) 推荐(0) 编辑

2020年11月19日 #

既然python的多线程是"伪多线程",那么多线程访问共享资源的时候,还需要线程锁吗

摘要: 最近处理的大多数任务都是基于python的多线程实现的,然而使用python逃避不开的一个话题就是,python的GIL(的全称是 Global Interpreter Lock)全局解释器锁是单线程的,那么是不是意味着python的多线程也是串行的?多线程对共享资源的使用就不需要锁(线程锁)了? 阅读全文

posted @ 2020-11-19 10:08 MSSQL123 阅读(1108) 评论(0) 推荐(0) 编辑

2020年11月10日 #

Redis stop-writes-on-bgsave-error参数导致的写入异常,Debugging: MISCONF Redis is configured to save RDB snapshots(译)

摘要: 最近遇到应用程序客户端在往redis中写入数据的时候发生了一个这样一个错误:MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that m 阅读全文

posted @ 2020-11-10 23:20 MSSQL123 阅读(746) 评论(0) 推荐(0) 编辑

2020年11月2日 #

MySQL集群故障转移的时候在基于python的客户端连接层自动failover实现

摘要: 数据库的集群或者是分布式,越来越成为一个趋势,对于相对较为年轻的Redis或者MongoDB集群,集群在不需要任何第三方工具,本身就可以完成高可用(自动故障转移),同时对应用程序非常友好,类似于Jedis、MongoCliet等客户端,应用端以“智能化”地判断读集群中节点的读写属性去访问数据,而无需 阅读全文

posted @ 2020-11-02 19:38 MSSQL123 阅读(569) 评论(0) 推荐(0) 编辑

2020年8月14日 #

postgresql中的咨询锁(advisory lock)

摘要: 咨询锁(advisory lock),有的地方翻译为顾问锁,作为Postgresql中一种特有的锁,关于对其介绍,仅从咨询锁的描述性定义来看,一开始还真的没明白这个咨询锁是干什么的。 暂时抛开咨询锁的概念,先说数据库中传统的锁机制。默认情况下的事务性锁,读/写会自动加锁,读/写完成后会自动解锁(加解 阅读全文

posted @ 2020-08-14 13:01 MSSQL123 阅读(5982) 评论(0) 推荐(0) 编辑

2020年8月10日 #

PostgreSQL Shared Buffers 全面指南(译)

摘要: 译者注:与MySQL设置innodb_buffer_pool_size = 80%左右的系统内存相比,也就是将操作系统大部分内存分配给Innodb的buffer pool的缓存管理机制不同,Postgresql采用数据库采用实例buffer和操作系统buffer双缓存(effective_cache 阅读全文

posted @ 2020-08-10 13:36 MSSQL123 阅读(5049) 评论(0) 推荐(1) 编辑

2020年8月5日 #

Postgres 日志监控:阻塞,死锁,Checkpoint 优化(译)

摘要: 原文地址:https://pganalyze.com/blog/postgresql-log-monitoring-101-deadlocks-checkpoints-blocked-queries 部分运维PostgreSQL数据库的人通常有很多工作要做,并且没有足够的时间来定期查看Postgre 阅读全文

posted @ 2020-08-05 13:43 MSSQL123 阅读(3046) 评论(0) 推荐(1) 编辑

2020年7月30日 #

PostgreSQL MVCC原理以及事务可见性对执行计划的影响

摘要: 先从上次遇到的一个执行计划相关的疑问入手,类似于select count(1) from table的查询,可以在即某些较小字段上的索引进行扫描来替代全表扫描来实现count优化,这是一个MySQL中传统的优化套路,但是在postgresql中类似场景总是会走全表扫描而不是预期的索引扫描,为什么同样 阅读全文

posted @ 2020-07-30 22:46 MSSQL123 阅读(1449) 评论(0) 推荐(0) 编辑

2020年7月28日 #

PostgreSQL执行计划概述

摘要: 执行计划个人理解是一个“点”,“线”,“面”的问题,关系数据库中执行计划是一个同质化的对象,串联起来还是比较容易掌握的,对于一条复杂的sql,所谓的点就是其中单个表的访问方式,线是表之间的连接\驱动顺序,面就是表与表之间的具体连接算法以及中间结果在内存缓冲区中的处理(类似于bitmap scan,中 阅读全文

posted @ 2020-07-28 23:23 MSSQL123 阅读(5517) 评论(1) 推荐(3) 编辑

2020年7月25日 #

PostgreSQL中的位图索引扫描(bitmap index scan)

摘要: 从MySQL的MRR开始 开始之前,先从MySQL入手,看一下MySQL中的MRR机制原理,也就是Multi-Range Read。MySQL中在按照非聚集索引的范围查找且需要回表的情况下,比如select * from t where c2>100 and c2<200;c2为非聚集索引。如果直接 阅读全文

posted @ 2020-07-25 17:32 MSSQL123 阅读(10458) 评论(1) 推荐(0) 编辑

2020年7月24日 #

PostgreSQL中三种自增列sequence,serial,identity区别

摘要: 这三个对象都可以实现自增,这里从如下几个维度来看看这几个对象有哪些不同,其中功能性上看,大部分特性都是一致的或者类似的。 1,sequence在所有数据库中的性质都一样,它是跟具体的字段不是强绑定的,其特点是支持多个对个对象之间共享。 sequence作为自增字段值的时候,对表的写入需要另外单独授权 阅读全文

posted @ 2020-07-24 13:12 MSSQL123 阅读(7741) 评论(0) 推荐(0) 编辑

2020年7月23日 #

PostgreSQL中的死锁和锁等待

摘要: 开始之前明确一下死锁和锁等待这两个事件的异同相同的之处:两者都是当前事物在试图请求被其他事物已经占用的锁,从而造成当前事物无法执行的现象不同的之处:死锁是相关session双方或者多方中必然要牺牲(回滚)至少一个事务,否则双方(或者多方)都无法执行;锁等待则不然,对于暂时无法申请到的锁,尝试持续地“ 阅读全文

posted @ 2020-07-23 13:43 MSSQL123 阅读(4291) 评论(0) 推荐(0) 编辑

2020年7月22日 #

Postgresql中最有用的扩展(Extensions)pg_stat_statements(译)

摘要: 原文地址:https://www.citusdata.com/blog/2019/02/08/the-most-useful-postgres-extension-pg-stat-statements/Postgresql的Extensions能够延伸,更改和推进Postgres的行为。怎么样?通过 阅读全文

posted @ 2020-07-22 22:52 MSSQL123 阅读(1902) 评论(2) 推荐(0) 编辑

2020年7月21日 #

Postgresql统计信息概述

摘要: 对于sql优化,除了索引之外,执行计划和统计信息是无法绕开的一个话题,如果sql优化(所有的RDBMS)脱离了统计信息的话就少了一个为什么的过程,味道就感觉少了一大半。刚接触Postgresql,粗浅地学习总结一下Postgresql相关的统计信息。 postgresql 进程模型 开始之前,有必要 阅读全文

posted @ 2020-07-21 17:44 MSSQL123 阅读(5030) 评论(1) 推荐(3) 编辑

2020年7月15日 #

您所不了解的Postgres 10功能:CREATE STATISTICS(译)

摘要: 原文地址:https://www.citusdata.com/blog/2018/03/06/postgres-planner-and-its-usage-of-statistics/,本文统一将原文中的“planner”译做“优化器” 如果您对Postgres进行了一些性能优化,则可能使用过EXP 阅读全文

posted @ 2020-07-15 21:56 MSSQL123 阅读(1304) 评论(0) 推荐(0) 编辑

2020年6月20日 #

MySQL中建表时可空(NULL)和非空(NOT NULL)的一些思考

摘要: 对于MySQL的一些个规范,某些公司建表规范中有一项要求是所有字段非空,意味着没有值的时候存储一个默认值。其实所有字段非空这么说应该是绝对了,应该说是尽可能非空,某些情况下不可能给出一个默认值。那么这条要求,是基于哪些考虑因素,存储空间?相关增删查改操作的性能?亦或是其他考虑?该理论到底有没有道理或 阅读全文

posted @ 2020-06-20 14:48 MSSQL123 阅读(7396) 评论(4) 推荐(2) 编辑

2020年5月29日 #

MySQL 8.0中的 explain analyze(译)

摘要: 原文地址:https://mysqlserverteam.com/mysql-explain-analyze/ MySQL 8.0.18刚刚发布(译者注:原文发表时间为October 17, 2019),它包含了一个全新的特性来分析和理解查询是如何执行的:explain analyze。 expla 阅读全文

posted @ 2020-05-29 22:45 MSSQL123 阅读(1438) 评论(0) 推荐(0) 编辑

2020年5月12日 #

MySQL 8.0中与DBA和运维人员相关的10大特性(译)

摘要: 原文地址:http://lefred.be/content/top-10-mysql-8-0-features-for-dbas-ops/ 临时表的改进 MySQL 5.7中,所有内部临时表都是在名为“ibtmp1”的惟一共享表空间中创建的。此外,临时表的元数据也将存储在内存中(不再存储在.frm文 阅读全文

posted @ 2020-05-12 21:18 MSSQL123 阅读(658) 评论(0) 推荐(0) 编辑

MySQL 8.0 InnoDB对即时加字段的支持(instant add column)(译)

摘要: 原文地址:https://mysqlserverteam.com/mysql-8-0-innodb-now-supports-instant-add-column/ 长期以来,即时DDL一直是最受欢迎的InnoDB功能之一。对于越来越大且快速增长的数据集,任何网络规模数据库中必须具备立即执行DDL的 阅读全文

posted @ 2020-05-12 19:33 MSSQL123 阅读(3626) 评论(0) 推荐(0) 编辑

2020年5月5日 #

redis 6.0 redis-cluster-proxy集群代理尝试

摘要: 伴随着Redis6.0的发布,作为最令人怦然心动的特性之一,Redis官方同时推出Redis集群的proxy了:redis-cluster-proxy,https://github.com/RedisLabs/redis-cluster-proxy 相比从前访问Redis集群时需要制定集群中所有的I 阅读全文

posted @ 2020-05-05 12:01 MSSQL123 阅读(12404) 评论(4) 推荐(2) 编辑

2020年4月29日 #

OOM导致MySQL服务被kill案例一则

摘要: 看到这个 故障分析 | MySQL OOM 故障应如何下手,想起来几天前也遇到一次MySQL服务因为OOM被杀掉的情况,记录一下 背景:一个测试环境,由于Centos系统上没有设置虚拟内存,运行的MySQL实例buffer_pool_size配置的不合理,运行了一个较大的查询后,产生了一个戏剧性的问 阅读全文

posted @ 2020-04-29 20:46 MSSQL123 阅读(1020) 评论(0) 推荐(0) 编辑

2020年4月28日 #

MySQL 8.0的原子DDL非事务性DDL,绝大多数情况下,原子DDL仍旧是一个然并卵的特性

摘要: 首先声明一下:MySQL 8.0之后,依旧不支持DDL事务。原子性DDL与其说是一个MySQL8.0下的新特性,倒是不如说是修复了MySQL5.7 DDL 执行失败造成的bug。 什么是原子DDL:当执行DDL时,数据字典更新、存储引擎操作和二进制日志中的写操作被合并到一个原子事务中,该事务要么完全 阅读全文

posted @ 2020-04-28 20:34 MSSQL123 阅读(1069) 评论(0) 推荐(0) 编辑

2020年4月21日 #

从创建索引过程中内存变化来看SQL Server与MySQL的内存淘汰算法

摘要: 在sqlserver中,几年之前就注意到一个现象:sqlserver中对一个大表创建索引或者rebuild索引的过程中,会引起内存剧烈的动荡,究其原因为何,这种现象到底正不正常,是不是sqlserver内存管理存在缺陷?另外,最近刚好想到跟MySQL对比一下类似操作引起的内存变化,测试MySQL会不 阅读全文

posted @ 2020-04-21 23:07 MSSQL123 阅读(765) 评论(0) 推荐(0) 编辑

2020年4月18日 #

关于MySQL死锁检测机制参数innodb_deadlock_detect设置的一点思考

摘要: 微信公众号中(这里)看到一个关于MySQL的innodb_deadlock_detect与并发相关的细节,觉得比较有意思,也即innodb_deadlock_detect这个参数的设置问题 死锁检测是一个MySQL Server层的自动检测机制,可以及时发现两个或者多个session间互斥资源的申请 阅读全文

posted @ 2020-04-18 12:04 MSSQL123 阅读(6728) 评论(0) 推荐(2) 编辑

2020年3月29日 #

一则MySQL派生表优化案例

摘要: 笔者最近遇到一则典型的因为sql中存在派生表造成的性能案例,通过改写SQL改善了的性能,但当时并没有弄清楚这其中的原因,派生表究竟是什么原因会导致性能上的副作用。说来也巧,很快就无意中就看到下文中的提到的相关的派生表的介绍以及其特性之后,才发现个中缘由,本文基于此,用一个非常简单的demo来演示该问 阅读全文

posted @ 2020-03-29 18:40 MSSQL123 阅读(2359) 评论(0) 推荐(3) 编辑

2020年3月22日 #

MySQL InnoDB表的碎片量化和整理(data free能否用来衡量碎片?)

摘要: 网络上有很多MySQL表碎片整理的问题,大多数是通过demo一个表然后参考data free来进行碎片整理,这种方式对myisam引擎或者其他引擎可能有效(本人没有做详细的测试).对Innodb引擎是不是准确的,或者data free是不是可以参考,还是值得商榷的。本文基于MySQL的Innodb存 阅读全文

posted @ 2020-03-22 01:07 MSSQL123 阅读(4646) 评论(5) 推荐(4) 编辑

2020年1月6日 #

Redis主从结构主节点执行写入后wait命令对性能的影响

摘要: 这里的Redis主从结构可以是简单的主从,sentinel,redis cluster中的主从等。wait命令的作用:此命令将阻塞当前客户端,直到当前Session连接(主节点上)所有的写命令都被传送到指定数据量的slave节点。如果到达超时(以毫秒为单位),则即使尚未完全传送到达指定数量的salv 阅读全文

posted @ 2020-01-06 22:47 MSSQL123 阅读(1695) 评论(0) 推荐(0) 编辑

2020年1月1日 #

令人抓狂的redis和rediscluster Python驱动包的安装

摘要: 本文环境:centos 7,Python3编译安装成功,包括pip3,然后需要安装redis相关的Python3驱动包,本的redis指redis包而非redis数据库,rediscluster类似。 先理清楚几个概念1,redis包更准确地说是redis-py包,是Python连接Redis的驱动 阅读全文

posted @ 2020-01-01 19:00 MSSQL123 阅读(11228) 评论(4) 推荐(1) 编辑

2019年12月27日 #

基于Docker的Consul集群实现服务发现

摘要: 服务发现 其实简单说,服务发现就是解耦服务与IP地址之间的硬绑定关系,以典型的集群为例,对于集群来说,是有多个节点的,这些节点对应多个IP(或者同一个IP的不同端口号),集群中不同节点责任是不一样的。比如说一个数据集群中,可以分为读节点或者写节点,写节点和读节点都是相对的,不是硬绑定的,某一个逻辑节 阅读全文

posted @ 2019-12-27 15:14 MSSQL123 阅读(932) 评论(0) 推荐(0) 编辑

2019年12月18日 #

应用中引入缓存层后,缓存和持久化层数据一致性的思考

摘要: 一个应用中决定加缓存(Redis,memcached)之前,要考虑的第一个问题就是,引进了缓存之后,会带来哪些收益(利),付出哪些代价,引起哪些额外的问题(弊)? 任何新的中间件引进,收益和成本都是伴随的,只有当利大于弊的情况下,能够容忍其弊端(彻底解决?没有额外代价又没有负面影响,是不可能的,那就 阅读全文

posted @ 2019-12-18 19:24 MSSQL123 阅读(889) 评论(0) 推荐(1) 编辑

2019年12月12日 #

Redis中几个简单的概念:缓存穿透/击穿/雪崩,别再被吓唬了

摘要: Redis中几个“看似”高大上的概念,经常有人提到,某些好事者喜欢扣概念,嘴巴里冒出来的全是高大上的名词(互联网八股文???),呵呵! 其实这几个概念:缓存穿透/缓存击穿/缓存雪崩,有一个共通的相似之处,就是高并发下,某些原因导致缓存层失去了保护,导致后端的持久化层(数据库)承担较大压力的情形。需要 阅读全文

posted @ 2019-12-12 10:17 MSSQL123 阅读(907) 评论(3) 推荐(2) 编辑

2019年12月10日 #

Redis Cluster 自动化安装,扩容和缩容

摘要: Redis Cluster 自动化安装,扩容和缩容 之前写过一篇基于python的redis集群自动化安装的实现,基于纯命令的集群实现还是相当繁琐的,因此官方提供了redis-trib.rb这个工具虽然官方的的redis-trib.rb提供了集群创建、 检查、 修复、均衡等命令行工具,之所个人接受不 阅读全文

posted @ 2019-12-10 20:18 MSSQL123 阅读(2657) 评论(0) 推荐(0) 编辑

2019年11月27日 #

mysql 8.0 忘记root密码后重置

摘要: 最近状态很不好,一直晕晕晕晕晕晕乎乎的,一个测试实例,下班前修改了一下root的密码,接着就下班走人,第二天来发现root密码忘了 刚好自动化安装脚本整理好了,本来想着算了直接重装实例得了,简单省事也花不了半分钟,反正是测试实例,没什么大问题发现有些思维定势,所以最近一直暗示自己要做一些一上来就排斥 阅读全文

posted @ 2019-11-27 20:45 MSSQL123 阅读(5748) 评论(0) 推荐(1) 编辑

2019年11月26日 #

MySQL 8.0部分弃用的参数整理

摘要: 最近整理了一下MySQL 8.0的自动化安装,其中用到了一个MySQL 5.7版本的自定义配置文件,由于没有对(MySQL 8.0)做针对性修改,导致安装过程中出现了一些错误其中部分原因就是MySQL 5.7时代的配置在MySQL 8.0不再被支持,同时某些参数不再建议使用,如果继续保留在配置文件中 阅读全文

posted @ 2019-11-26 09:56 MSSQL123 阅读(4108) 评论(0) 推荐(2) 编辑

2019年11月5日 #

MySQL Online DDL与DML并发阻塞关系总结

摘要: MySQL DDL操作执行的三种方式 1,INPLACE,在进行DDL操作时,不影响表的读&写,可以正常执行表上的DML操作,避免与COPY方法相关的磁盘I/O和CPU周期,从而最小化数据库的总体负载。 最小化负载有助于在DDL操作期间保持良好的性能和高吞吐量。 2,COPY,不允许并发执行过多个D 阅读全文

posted @ 2019-11-05 21:34 MSSQL123 阅读(1696) 评论(0) 推荐(0) 编辑

2019年10月31日 #

MySQL Error Log 文件丢失导致The server quit without updating PID file启动失败的场景

摘要: 今天在做mysql sniff测试的时候,中间重启MySQL实例的过程中,出现了"The server quit without updating PID file"这个经典的错误。因为把mysql sniff的日志文件放在了mysql实例的目录中,因此删除mysql sniff日志的时候无意中删除 阅读全文

posted @ 2019-10-31 20:02 MSSQL123 阅读(552) 评论(0) 推荐(0) 编辑