作者介绍
陕西移动信息技术部 张云川
陕西移动信息技术部 王永强
新炬网络中北三部 张建
随着国家对自主可控战略的深入推进,笔者所在省份聚焦数据库国产化替换,全面加速数据库国产化替换进程。以核心系统带动周边系统,成功在能力运营中心、CRM等核心系统中引入了国产数据库。为确保替换工作万无一失,我们精心制定了渐进式迁移的六步策略,确保每一步都稳健而有序,为数据库的顺利替换提供坚实保障。

一、渐进式迁移方案
第一阶段:部署



effective_cache_size = RAM * 0.7 这个参数不会影响分配给AntDB的共享内存,也不保留内核磁盘缓存,只是用于优化器的评估目的。 参数effective_cache_size通知优化器,系统提供多大的cache,cache包括内存、文件系统、cpu的cache等,是这些cache的总和。
使用select pg_current_wal_lsn()(pg10.x版本)查看实际的WAL位置。 启用log_checkpoints=on,然后从服务器日志中提取信息(每个完成的检查点将有详细的统计信息,包括WAL的数量)。
maintenance_work_mem和该参数autovacuum_work_mem很像,没有设置autovacuum_work_mem,默认值是-1,则使用maintenance_work_mem的设置值,maintenance_work_mem的总内存消耗等于maintenance_work_mem*autovacuum_max_workers。 该参数为user类型的,全局设置为4GB,满足普通的小表的维护向操作,进行大表的维护性操作,可以进行会话级别的设置,加速大表的维护性操作。 该参数最好与autovacuum_work_mem分开设置,避免维护性操作与清理操作共享内存,降低性能。
区分小表和大表,小表使用系统级别设置就满足需求,大表则不能依赖这样的设置。大表需要设置单独的表存储参数,来进行垃圾清理,比如:
autovacuum_vacuum_threshold,autovacuum_vacuum_threshold (integer)autovacuum_vacuum_scale_factorautovacuum_vacuum_scale_factorautovacuum_analyze_thresholdautovacuum_analyze_scale_factorautovacuum_vacuum_cost_delay, autovacuum_vacuum_cost_delayautovacuum_vacuum_cost_limit, autovacuum_vacuum_cost_limit
建议多使用分区表来存储数据,每个分区不要超过32G。 业务不繁忙的时候手动进行垃圾清理或者脚本定时任务,设置合理的表的年龄,清理长事务。
首先autovacuum是一个重IO操作。 区分小表和大表,小表使用系统级别设置就满足需求,大表则不能依赖这样的设置。 大表需要设置单独的表存储参数,来进行垃圾清理,比如:
autovacuum_analyze_thresholdautovacuum_analyze_scale_factorautovacuum_vacuum_cost_delayautovacuum_vacuum_cost_limit
经常查看AntDB的CSV日志,如果发现有大量的automatic analyze of table x.x.x.x,需要设置autovacuum_analyze_threshold的参数值。
区分大表和小表,在小表比较多的情况下设置1-2min,在大表比较多的时候设置为5min甚至更长。 经常查询表pg_stat_progress_analyze/pg_stat_progress_vacuum,了解autovacuum的情况。
首先autovacuum是一个重IO操作。 限制清理worker在清理过程中到达最大的清理成本的时候需要将清理worker休息或者暂停一下。 可以查询pg_stat_user_tables里面的字段n_dead_tup,如果这个一直在增长,就需要减小该参数的暂停时间,加速清理。
autovacuum所有清理worker扫描页累计起来的成本。 区分普通磁盘和固态磁盘,普通磁盘与固态磁盘在设置该参数的时候有区别,普通磁盘就2000-4000,固态磁盘可以达到20000甚至更高。 可以给大表的设置的不同的存储参数,比如autovacuum_vacuum_cost_limit。
默认值设置太小,意义对大表来说太大了,清理行数太多,容易造成瞬时IO波动。 可以给大表设置的不同的存储参数,比如autovacuum_vacuum_scale_factor。 区分普通磁盘和固态磁盘,普通磁盘设置太高,清理垃圾数据多了,IO操作就加重,影响其他任务正常操作,而ssd会设置的比较高,有利于垃圾数据清理。
默认值设置太小,意义对大表来说太大了,清理行数太少,容易触发清理worker启动,表的脏数据有变化,有触发操作,对清理没有意义。 可以给大表的设置的不同的存储参数,比如autovacuum_vacuum_threshold。 区分普通磁盘和固态磁盘,普通磁盘设置不能抬高,ssd会设置得比较高。
对于复杂查询,并行运行好几个排序或者哈希操作,每个操作都会被允许使用这个参数指定的内存量,然后才会开始写数据到临时文件。 explian的时候出现quicksort memory,work_mem设置正确。 多个正在运行的会话进行并发的操作。被使用的总内存可能是work_mem值的好几倍。





第四阶段:迁移

第五阶段:上线
第六阶段:监控



1.merge语法不支持





文章转载自AntDB数据库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




