- 博客(67)
- 资源 (6)
- 收藏
- 关注
转载 Redis分布式锁的七种方式
日常开发中,秒杀下单、抢红包等等业务场景,都需要用到分布式锁。而Redis非常适合作为分布式锁使用。本文将分七个方案展开,跟大家探讨Redis分布式锁的正确使用方式。如果有不正确的地方,欢迎大家指出哈,一起学习一起进步。捡田螺的小男孩什么是分布式锁方案一:SETNX + EXPIRE方案二:SETNX + value值是(系统时间+过期时间)方案三:使用Lua脚本(包含SETNX + EXPIRE两条指令)方案四:SET的扩展命令(SET EX PX NX)
2025-02-20 19:38:32
20
原创 Redis超时相关
1、在使用的StackExchange.Redis的NuGet包连接Redis的时候发现时不时的发现Redis连接超时。在启动的时候设置一下全局线程池设置最小线程数。
2025-01-15 20:30:27
321
原创 PostgreSQL 执行计划相关
否则,将使用临时文件。不过我们要注意的是,有些时候,索引扫描的效率还不一定比顺序扫描高,比如某个扫描需要返回的行数较多,底层存储的顺序读性能远高于离散读,这种情况下,如果我们还一味追求索引扫描,那么可能会起到副作用。如果这张表上的数据量比较大,那么这种扫描方式可能会产生较大的IO,消耗较多的CPU资源,持续较长的时间。PG的扫描方式与Oracle等其他数据库类似,但也存在较大的不同,为了掌握好SQL语句优化的技术,我们首先要学会看SQL语句的执行计划,而看执行计划的最为基础的能力就是看懂每一步的扫描方式。
2025-01-13 20:11:47
662
原创 MySQL内存分析常用语句
GreatSQL 运行时内存太高,超过90%怎么办(重发,附解决办法)-优快云博客。MySQL 8.0不再担心被垃圾SQL搞爆内存 - GreatSQL - 博客园。MySQL内存使用率高且不释放问题排查与总结_Mysql_脚本之家。各模块内存使用变化(结果是累计值,可以根据差值观察变化情况)各种buffer pool大小,是否有明显不合理的设置。MySQL内存为什么不断增高,怎么让它释放 - 墨天轮。MySQL进程内存一直在涨,怎么办?首先需要确认是否是MySQL占用的内存。MySQL总占用内存。
2024-12-30 15:55:11
505
原创 【postgresql 物化视图】自动刷新物化视图2种方法
新版的物化视图新增了 concurrently 参数,可以使在刷新视图时不会锁住该物化视图的查询工作。pg_cron是基于cron的作业调度插件,语法与常规cron相同,但它可以直接从数据库执行PostgreSQL命令。│ │ │ │ ┌───────────────── 一周中的某一天 :0 ~ 6,0表示周日。│ │ │ ┌──────────────── 月份: 1 ~ 12。│ │ ┌─────────────── 日期: 1 ~ 31。│ ┌────────────── 小时: 0 ~ 23。
2024-12-30 15:31:05
638
原创 PostgreSQL add column default 在各版本的优化
非新插入的行:检查athasmissing的值,若为t,则从attmissingval中读取值返回(结合tuple head的t_infomask掩码以及null bitmaps,可以实现输出时是否使用元数据中存储的默认值)例如设置DEFAULT now()会将事务的当前值now()放入atthasmissingval ,所有现有行查询将继承它,而新插入的行将返回该行实际插入的时间。pg_attribute中 atthasmissing=t,attmissingval为设置的默认值。
2024-12-17 20:46:50
869
原创 流程图,你画对了么?
具体来说,流程是一项活动或一系列连续有规律的事项或行为进行的程序。资源、过程、结构、结果、对象和价值。一个流程会把这些基本要素串联起来,例如流程中资源的输入、流程中的活动、活动的结构,由谁执行,输出结果、流程最终创造的价值等。流程图(Flow Chart),顾名思义,就是用来直观地描述一个工作过程的具体步骤图,它使用图形表示流程思路,是一种极好的方法。它在一些技术设计、工作步骤及商业简报等领域应用较为广泛,也可以称之为输入-输出图。
2024-12-03 14:50:06
2145
原创 PG逻辑复制的REPLICA IDENTITY几种设置
默认情况下,复制所有操作类型。首先了解下,逻辑复制的概念。因此,可以问创建test_publication的人有什么意图,或者将逻辑复制logical更改成物理复制,如果逻辑复制是必须的,可能有效的方式,就是设置主键,其实从数据库应用设计开发的规范角度,无特殊情况,还是要为表创建一个主键,而且推荐是无意义的类型,例如序列。,使用发布者/订阅者模型,使用订阅复制槽技术,可并行的传输WAL日志,通过在订阅端回放WAL日志中的逻辑条目,保持复制表的数据同步,注意这里不是“SQL”复制,而是复制SQL操作的结果。
2024-11-08 14:40:44
1283
原创 关于PostgreSQL的分区表的历史及分区裁剪参数enable_partition_pruning与constraint_exclusion的区别
要说明这两个参数的区别需要先讲一讲PostgreSQL数据库中分区的历史,在PostgreSQL 10版本之前,PostgreSQL数据库实际上是没有单独的创建分区表的DDL语句,都是通过表继承的原理来创建分区表,这样使得在PostgreSQL中使用分区表不是很方便,到PostgreSQL 10之后,PostgreSQL扩展了创建表的DDL语句,可以用这个DDL语句来创建分区表,原先使用继承的方式还是可以创建分区表,但这两种分区表是不能混用的。这两个参数有什么区别呢?
2024-08-28 17:26:00
515
2
转载 PostgreSQL分区表
这样每一个分区对应一个城市的数据,分区的数据量平均是 2G,如果是分布式架构,那么单个分片内,单个子分区就是 0.1G,200w 的数据量,如果单表是百亿数据量,如果还嫌子分区数据量太大,我们可以继续进行二级、三级、四级..... 多级分区。PostgreSQL 通过对执行语句的分析处理,最终把扫描的任务定位在分区 tab_order_1 上,自动把查询语句转换成下面的语句,其他分区根本不需要扫描,这就是分区裁剪技术。--这里表示使用userid作为分区键,使用hash进行分区。
2024-08-28 16:25:24
280
原创 PostgreSQL模糊查询索引的使用
对于只有前模糊(%abc)的查询需求,使用collate "C"的reverse()表达式的b-tree索引;bill=# explain (analyze,verbose,timing,costs,buffers) select * from test001 where c1 like '%中国%';bill=# explain (analyze,verbose,timing,costs,buffers) select * from test001 where c1 like '%我是程序员%';
2024-04-25 14:53:34
1004
原创 找出mongodb的jumbo块并进行分裂
从上面结果可以看出,chunks的数量增加了,但jumbo chunks的数量没有减少很多。因为大部分jumbo chunk是相同shard key组成的,所以无法继续分割。4、运行上一步骤的split命令。
2024-04-12 15:15:25
467
原创 mysql 磁盘空间100%
5. 事务提交,整个binlog cache和binlog临时文件数据全部写入到binlog file中,同时释放binlog cache和binlog临时文件。binlog cache和binlog临时文件都是在事务运行过程中写入,一旦事务提交,binlog cache和binlog临时文件都会释放掉。4. 如果binlog cache的空间已经满了,则将binlog cache的数据写入到binlog临时文件,同时清空binlog cache。如果binlog临时文件的大小大于了。
2024-04-03 17:49:54
940
原创 MongoDB ·sharding chunk 分裂与迁移详解
写入数据时,当 chunk 上写入的数据量,超过分裂阈值时,就会触发 chunk 的分裂,chunk 分裂后,当出现各个 shard 上 chunk 分布不均衡时,就会触发 chunk 迁移。如果使用 range 分片,因为 shardKey 的取值不确定,预分片意义不大,很容易出现部分 chunk 为空的情况,所以 range 分片只支持 hash 分片。mongoDB 的自动 chunk 分裂只会发生在 mongos 写入数据时,当写入的数据超过一定量时,就会触发 chunk 的分裂,具体规则如下。
2024-03-19 20:35:30
1479
原创 MongoDB 中的锁分析
MongoDB 是一种常见的文档型数据库,因为其高性能、高可用、高扩展性等特点,被广泛应用于各种场景。在多线程的访问下,可能会出现多线程同时操作一个集合的情况,进而出现数据冲突的情况,为了保证数据的一致性,MongoDB 采用了锁机制来保证数据的一致性。下面来看看 MongoDB 中的锁机制。1、MongoDB 中使用一个 readers-writer 锁,它允许并发多个读操作访问数据库,但是只提供唯一写操作访问;
2024-03-14 15:28:01
1538
原创 pgbench 性能测试工具介绍与使用
pgbench -i会创建四个表pgbench_accounts、 pgbench_branches、pgbench_history以及pgbench_tellers,如果同名表已经存在会被先删除。如果低于限流值(-R),延迟会相对于事务预定的开始时间(而不是实际的事务开始时间)计算,因此其中也包括了平均调度延迟时间。创建标准pgbench场景使用的表,即pgbench_accounts、pgbench_branches、pgbench_history以及pgbench_tellers。
2024-02-22 16:11:05
2286
原创 PostgreSQL导出导入
pg_dump -h连接串 -U读写用户 -F c -b -v -N public 库名 > all_sch_except_pub.backup。pg_dump -h连接串 -U读写用户 -F c -b -v -n hr -n payroll 库名 > hr_payroll.backup。pg_dump -h连接串 --schema=待导出schema名 --schema-only 库名 > fin_rw.sql。pg_dump -h连接串 -U读写用户 -C 库名 > dbname.sql。
2024-02-05 16:58:33
2155
原创 postgresql lc_ctype不同值之间的转换
将 LC_CTYPE 设为「C」表示 isupper(c) 或 tolower(c) 等 C 语言函数[2]仅针对 US-ASCII 范围内的字元给出预期结果。因此,在进行LC_CTYPE转换时,需要注意表格中是否有非 US-ASCII 字符,并在进行任何变动前后,建议需要根据实际环境用例及数据进行测试,以确定其影响。#数据库my_db_1的lc_ctype为en_US.UTF-8 : (与数据库my_db仅差在lc_ctype)
2024-02-01 15:25:04
919
1
原创 postgres 使用函数批量分段删除与写入
RETURN '删除成功!RETURN '插入成功';一、 postgres使用函数批量删除数据万级数据。二 、 postgres使用函数批量插入数据。-- 执行分段批量删除。-- 执行分段批量删除。
2023-12-27 21:42:59
611
原创 Redis报错:JedisConnectionException: Could not get a resource from the pool
一次命令时间(borrow|return resource + Jedis执行命令(含网络) )的平均耗时约为1ms,一个连接的QPS大约是1000,业务期望的QPS是50000,那么理论上需要的资源池大小是50000 / 1000 = 50个,实际maxTotal可以根据理论值合理进行微调。JedisPool默认的maxTotal=8,下面的代码从JedisPool中借了8次Jedis,但是没有归还,当第9次(jedisPool.getResource().ping())3、发生异常可能的情况。
2023-11-23 20:12:58
7181
原创 postgresql新增非空默认值字段是否需要重写表
PostgreSQL 10 版本前表新增不带默认值的DDL不需要重写表,只需要更新数据字典,因此DDL能瞬间执行,如下: ALTER TABLE table_name ADD COLUMN flag text;如果新增的字段带默认值,则需要重写表,表越大,执行时间越长,如下。
2023-11-22 16:13:06
668
原创 阿里云云盘IOPS与IO吞吐
实例的云盘吞吐量取上述公式三个值中的最小值。实例的IOPS取上述公式三个值中的最小值。备注:吞吐量如果达到上限,也会影响IOPS。当前仅在MySQL规格表中展示最大IO带宽。备注:IOPS如果达到上限,也会影响吞吐量。RDS PG主实例规格表。(存储空间单位:GB)最大IOPS计算公式。
2023-11-22 11:48:22
1844
原创 postgresql视图的一些问题
针对上面的select * 创建的视图获取到基础表的所有字段内容,我们做一个测试,不难发现在基础表上新增字段后,对已建的视图是没有影响的,新的字段内容并不会自动添加到视图上。对于被视图引用的字段,是不允许被修改类型的,如果需要修改类型,需要先删掉视图,修改后再重建视图。可以看到修改基础表的字段名,对应视图的的字段名称没有自动同步过来,是没有生效的。同样,被视图引用的字段,是不允许被修改字段长度的。
2023-11-20 17:17:19
331
原创 Redis会不会丢失数据
那么从上面的分析得出,其实我们每次执行客户端命令的时候操作并没有写到aof文件中,只是写到了aof_buf内存当中,当进行下一个事件循环的时候执行beforeSleep之时,才会去fsync到disk中,所以, 如果下一次事件监听前,服务器挂了,仍有可能丢失上一次的操作日志,无法保证零丢失。以上我们进行了初步的一些源码分析,细心的朋友可能会发现我们是在什么时候写入到aof_buf内存的呢,不要紧,我们继续上源码。//进行fsync操作,上面只是写入缓冲区了,并没有真正意义上的flush到disk。
2023-11-09 16:28:09
156
转载 Postgresql数据库安全性配置-密码
密码的配置命令可能会被记录到history文件及csvlog日志文件中(如果开启了DDL或更高级别审计log_statement),这些文件明文记录了密码,可能造成密码泄露风险。passwordcheck.so模块可以实现密码复杂度要求,此模块可以检查密码,如果密码太弱,他会拒绝连接。例如密码长度,包含数字,字母,大小写,特殊字符等,同时排除暴力破解字典中的字符串。创建用户或修改用户密码时,强制限制密码的复杂度,限制密码不能重复使用。pg支持密码有效期配置,可以通过配置密码有效期,制定密码更换周期。
2023-10-30 19:41:05
2896
原创 Amazon RDS 数据库实例存储
Amazon RDS for MySQL、MariaDB、PostgreSQL、Oracle 和 Microsoft SQL Server 的数据库实例使用 Amazon Elastic Block Store (Amazon EBS) 卷进行数据库和日志存储。在某些情况下,您的数据库工作负载可能无法 100% 实现您预调配的 IOPS。有关更多信息,请参阅。有关实例存储定价的更多信息,请参阅。
2023-10-27 17:19:39
547
原创 postgresql序列
sequence类型的字段表,在使用CREATE TABLE new_table LIKE old_table的时候,新表的自增字段会已久指向原始表的sequence。2,identity本质是为了兼容标准sql中的语法而新加的,修复了一些serial的缺陷,比如无法通过alter table的方式实现增加或者删除serial字段。1,sequence在所有数据库中的性质都一样,它是跟具体的字段不是强绑定的,其特点是支持多个对个对象之间共享。##更改序列最大值为200。## 更改序列步长为50。
2023-10-27 16:47:02
807
原创 PostgreSQL 修改表字段常用命令操作
以上就是 PostgreSQL 修改表字段常用命令操作的完整攻略,希望对你有所帮助。为新设定的数据类型。
2023-10-24 16:38:59
11215
原创 postgresql 数据类型
smallint、integer(或者int)、bigint。对应的扩展是int2、int4、int8定点数numeric类型,这个用法如下,该类型是用在对于精确描述的数字上面,比如货币金额说明:precision:精度,就是小数点的左右共有多少个数字scale:刻度,就是小数点的右边有多少个数字比如:number(3,2):表示的就是2.12number(3):表示的就可以是整数:123number:表示的就不限制了:1233,432, 2212876注意:1.虽然该类型功能看着
2023-10-24 11:18:34
1151
原创 Postgres统计信息的配置和校准
pg_class中统计有每个表和索引中含有的总记录数量——reltuples字段,以及每个表和索引对象在磁盘中占用的数据块数量——relpages字段。(5 rows)relkind表示对象类型,r表示表,i表示索引。出于效率考虑,reltuples和relpages字段并不会实时更新,会有一定的延迟。VACUUM(包括auto acuum后台任务)和ANALYZE操作可以更新表的统计信息。
2023-10-10 17:48:25
735
原创 PostgreSQL 12: 新增 pg_partition_tree() 函数显示分区表信息
对于一维分区表,PostgreSQL 提供的元命令足够查看分区的完整信息,但对于多维分区表,元命令无法查看详尽的分区信息,PostgreSQL 12 提供的分区函数很容易做到这点。尽管二维分区表的使用并不是很多,分区表函数提供了分区表查询的另一种途径。
2023-10-10 17:06:26
1174
原创 Amazon ElastiCache for Redis 7 的新增功能
通过增强的 I/O 多路复用,每个专用网络 I/O 线程将命令从多个客户端传输到 ElastiCache for Redis 引擎中,利用 ElastiCache for Redis 高效批量处理命令的能力。然而,虽然 Redis OSS 管道批处理包括单个客户端的命令,但 ElastiCache for Redis 增强型 I/O 多路复用包括单个批处理中来自多个客户端的命令。通过增强的 I/O 多路复用,您将受益于增加的吞吐量和减少的延迟,而无需更改您的应用程序。在这种情况下,不会使用可用的 CPU。
2023-10-08 16:15:34
205
转载 系统稳定性建设
是否有分布式锁保障?这个阶段研发团队最希望拿到的需求是真正有业务价值的需求,而不是一个短期或临时的需求,因为如果是一个临时需求的话,往往对应的解决方案也是临时的,如果太多临时的解决方案遗留在系统中,久而久之将会变成巨大的“技术债”,总有一天会爆发,对系统稳定性及业务迭代速度造成巨大影响。而且有数据统计75%以上的线上case是由发版引起的,但是我们又不能不发版,那么我们能做的就是灰度,先发一部分机器上线,验证是否有问题,具体灰度的时间多久,可以视需求而定,确保新功能经过了线上流量充分验证之后,再进行全量。
2023-10-07 19:37:49
286
原创 Amazon RDS: Snapshot, restore, and recovery demystified
【代码】Amazon RDS: Snapshot, restore, and recovery demystified。
2023-10-07 15:58:41
107
原创 Optimize the cost of your Amazon ElastiCache for Redis workloads
【代码】Optimize the cost of your Amazon ElastiCache for Redis workloads。
2023-10-07 15:55:22
135
原创 postgresql 备库terminating connection due to conflict with recovery的报错
当等待超过这个时间时, wal replay会cancel与之有冲突的所有query, 然后开始恢复, 并且必须要恢复到wal receive的位置和wal replay位置一致状态后才会重置max_standby_streaming_delay等待时间, 没有到达这个状态前, 所有与wal replay有冲突的query都会被直接cancel(不再有query执行窗口), 所以cancel query可能会很频繁的出现.如果有大查询, 特别是人工发起的大查询, 不要和小查询混到一个ro节点查询.
2023-09-28 15:27:00
838
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人