阿里云在上周日(2022-12-18)发生了发生了香港region的可用区C的大规模故障,阿里云自己在也微信公共账号贴出了处理过程,服务影响,问题分析和改进措施。(《关于阿里云香港Region可用区C服务中断事件的说明》) 我使用阿里云不算多也不算少,2000个不到的实例,rds的mysql、pg、 […]
阿里云的rds的几个问题的探究
1. 阿里云的pg一键上云,其实是调用了pg_basebackup,这个功能不仅仅可以用在一键上云上,还能用在rds pg到rds pg的小版本升级上。 2. 阿里云的pg大版本升级过程: (一)准备阶段: 2.1 界面发起大版本升级; 2.2 原实例snapshot(注,需要打开秒级备份功能,不然 […]
pg_hba.conf文件的策略顺序
原来一直以为这个文件中,每一行的顺序是没有区别的,但是最近的一个需求,研究时发现,原来这个文件对登录的会话,是从上往下依次判断的: 具体的规则是:
1 2 3 |
1. 登录的会话,会顺着pg_hba.conf的策略一条一条往下走。 2. 如果遇到匹配到的规则,那么做成判断,是信任,还是拒绝,还是验证密码。后续就不往下走继续判断规则了。 3. 如果某一条规则不符合,没匹配成功,就继续往下走,继续做判断,直到所有的规则都判断完毕。 |
因此,如果我有一个用于备份的用户,叫anybackup(爱数备份软件),由于权限设置的 […]
数据库IO链路访问图
从千年虫bug的问题谈开去
最近微软又爆了一个千年虫的bug,微软FIP-FS反恶意软件扫描引擎由于Year 2022漏洞导致Exchange服务器无法发送邮件。 另外,本田、讴歌汽车也爆了Y2K22千年虫漏洞。 这是因为,在程序中,或者数据库中,字段类型定义成int32字段类型。而int32,一共32位,第一位表示符号,因此 […]
减少mysqlbackup 对IO压力的影响
通常情况下,我们总是系统备份的速度是越快越好。 但是,有时候这会导致IO压力,我们需要削峰处理。 我之前写过一个减少rman备份对OLTP系统的影响,其实mysql的备份(使用 MySQL Enterprise Backup)也可以采用类似的方法: 我们在mysqlbackup命令中,添加sleep […]
为什么说不要在pg 12前,用原生hash分区
pg在11之前,有原生的range分区和list分区,但是没有原生的hash分区。 hash分区是需要通过pg_pathman插件来实现。 如果你从原来pg 10版本+pg_pathman实现hash分区,且分区数比较多,比如1024个分区,那么到你升级到pg 11之后,如果采用了原生分区,你会发现 […]
SQL Server数据文件结构
Data file 结构: 第一个extent:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
page 0 : File Header,注m_type = 15,Metadata: ObjectId = 99 page 1 : PFS( page free space),注m_type = 11,Metadata: ObjectId = 99 page 2 : GAM ( global allocation map),注m_type = 8,Metadata: ObjectId = 99,每个GAM管理4GB的页面,所以每隔4GB大小的页面,会有一个GAM。 page 3 : SGAM ( shared global allocation map),注m_type = 9,Metadata: ObjectId = 99 page 4 : 空的,注m_type = 0,Metadata: ObjectId = 0 page 5 : 空的,注m_type = 0,Metadata: ObjectId = 0 page 6 : DCM(differential change map),注m_type = 16,Metadata: ObjectId = 99 page 7 :BCM(bulk change map),注m_type = 17,Metadata: ObjectId = 99 |
注意,如果大temp文件(一个超过4G)的page latch,往往是在temp数据文件的第一个extent的第2个page上,其争用可以用下面的sql监控: [crayon-675d […]
How to upgrade aws rds postgresql
## 0. Read the summary of upgrade pg https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.PostgreSQL.html ## 1. Prepare […]
数据库应急杀进程脚本
Oracle: (1)数据库内操作
1 2 3 4 5 6 7 |
--单实例: select 'alter system kill session '''||s.sid||','||s.SERIAL#||''' immediate;' from v$session s where s.status='INACTIVE' --状态为非活跃 and s.USERNAME= 'ZZZ' --用户为ZZZZ s.type<>'BACKGROUND' --不为oracle后台进程 and program not like '%(J0%' --不为oracle的JOB进程 order by s.LOGON_TIME asc,sql_exec_start asc; |
(2)操作系统中操作(要求登录到数据库主机)
1 2 |
## kill掉所有local=no的非本地连接进程 ps -ef|grep -v grep|grep LOCAL=NO|awk '{print $2}'|xargs kill -9 |
SQL Server:
1 2 3 |
--kill 被阻塞会话 select 'kill '+cast(spid as varchar) FROM sys.sysprocesses sp where sp.blocked !=0 and sp.spid != sp.blocked and loginame='XXX'; |
pg报错current transaction is aborted
在一个事务中,pg报错了current transaction is aborted:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
mumy_corehrdban_psdb=> begin; BEGIN mumy_corehrdban_psdb=> select * from orasup_test1 ; a --- 1 2 3 (3 rows) mumy_corehrdban_psdb=> insert into orasup_test1 values(111); INSERT 0 1 mumy_corehrdban_psdb=> select * from not_exist; ERROR: relation "not_exist" does not exist LINE 1: select * from not_exist; ^ mumy_corehrdban_psdb=> insert into orasup_test1 values(222); ERROR: current transaction is aborted, commands ignored until end of transaction block mumy_corehrdban_psdb=> select * from orasup_test1; ERROR: current transaction is aborted, commands ignored until end of transaction block mumy_corehrdban_psdb=> mumy_corehrdban_psdb=> \d ERROR: current transaction is aborted, commands ignored until end of transaction block mumy_corehrdban_psdb=> mumy_corehrdban_psdb=> mumy_corehrdban_psdb=> rollback; ROLLBACK mumy_corehrdban_psdb=> select * from orasup_test1; a --- 1 2 3 (3 rows) mumy_corehrdban_psdb=> |
原因是在一个事务中,pg如果遇到的Error的报错,会忽略后续的命令,后续所有命令都会报错:current transaction is abor […]
postgresql 检索当前数据库中所有的分区表
pg 10由于没有hash分区,而pg_pathman一直都是支持多种分区的。所以如果某些pg 11以前的系统,可能会混合部署pg原生分区和pg_pathman。 要检查这种混合部署环境中的分区情况,可以用下面的sql:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
select b.parent::text as part_table, 'native partition' as part_tool, CASE WHEN a.partstrat='r' THEN 'range' WHEN a.partstrat='l' THEN 'list' WHEN a.partstrat='h' THEN 'hash' ELSE 'other' END as part_type, b.cnt as part_cnt from pg_partitioned_table a, (SELECT parent.oid, parent.relname AS parent, COUNT(*) as cnt FROM pg_inherits JOIN pg_class parent ON pg_inherits.inhparent = parent.oid JOIN pg_class child ON pg_inherits.inhrelid = child.oid JOIN pg_namespace nmsp_parent ON nmsp_parent.oid = parent.relnamespace JOIN pg_namespace nmsp_child ON nmsp_child.oid = child.relnamespace GROUP BY oid,parent) b where a.partrelid=b.oid union all select parent::text, 'pg_pathman', CASE WHEN parttype=1 THEN 'hash' WHEN parttype=2 THEN 'range' ELSE 'other' END , count(*) from pathman_partition_list group by parent,parttype |
显示结果如下 […]