暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【企业级】达梦数据库单机标准化部署方案

呆呆的私房菜 2024-09-09
253
    Whoami:5年+金融、政府、医疗领域工作经验的DBA
    Certificate:OCP、PCP
    Skill:Oracle、Mysql、PostgreSQL
    Platform:CSDN、墨天伦、公众号(呆呆的私房菜)
    复制


    阅读本文可以了解达梦单机形态下的标准化部署,包括系统参数优化、软件安装部署、归档配置、备份策略和数据库参数优化等相关内容。


    01

    达梦数据库概述
    • 达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM。达梦数据库管理系统的最新版本是8.0版本,简称DM8。

    • DM8采用全新的体系架构,在保证大型通用的基础上,针对可靠性、高性能、海量数据处理和安全性做了大量的研发和改进工作,极大提升了达梦数据库产品的性能、可靠性、可扩展性,能同时兼顾OLTP和OLAP请求,从根本上提升了DM8产品的品质。


    • 达梦数据库产品体系包含如下几种:

    • 1. DM8:新一代大型通用关系型数据库;

    • 2. DMDataWatch:适用于高可靠环境场景的数据库集群;

    • 3. DMDSC:适用于密集交易性场景的数据库集群;

    • 4. DMRWC:适用于读多写少场景的数据库集群;

    • 5. DMMPP:适用于大规模数据分析场景的数据库集群;

    • 6. DMDPC:适用于金融科技、工业互联网、物联网场景。


    02

    DM8体系架构

    • 内存结构:

    • 内存池:分为共享内存池和运行内存池。

    • 缓冲区:数据缓冲区、日志缓冲区、字典缓冲区、SQL缓冲区;

    • 排序区:提供数据排序所需的空间;

    • 哈希区:为哈希连接专门设定的缓冲区,当哈希连接排序量非常大时,会使用外存哈希方式。


    • 逻辑结构:表空间 > 段 > 簇 > 页(块);

    • 1. system表空间系统表空间主要存放DM数据库的数据字典,用户不能在system表空间创建表和索引。

    • 2. main表空间表空间初始化的时候就会自动创建,创建用户如果不指定默认表空间,系统自动指定main表空间作为用户默认表空间;

    • 3. roll表空间用来存放事务运行过程中执行dml操作之前的值,从而为访问该表的其他用户提供表数据的读一致性视图,由DM数据自动维护;

    • 4. temp表空间用户sql语句需要磁盘空间来完成某个操作时(如创建索引、排序、临时表等)会从该表空间分配临时段,由DM数据库自动维护;

    • 物理结构:

    • 1. 配置文件:设置功能选项的文本文件集合,以 ini 为扩展名;

    • 2. 控制文件:dm.ctl 是二进制文件,记录数据库必要的初始信息;

    • 3. 数据文件:数据真实存储的地方;

    • 4. 重做日志文件:数据库正在使用的日志文件;

    • 5. 归档日志文件:归档模式下的重做日志被连续写入到归档日志中;

    • 6. SQL日志文件:记录系统各绘画执行的sql语句、参数信息、错误信息等;

    • 7. 事务日志文件:记录DM数据库运行时的关键事件,如系统启停、内存申请失败、IO错误等一些致命错误。


    03

    DM8单机标准化部署


    • 单机部署环境介绍:


    主机名
    IP数据库名实例名数据库端口
    存储规划(LVS)
    dmdb01192.168.56.111dmdb
    dmdb5236
    /dev/sdb(安装磁盘100G)

    /dev/sdc(数据磁盘 500G)

    /dev/sdd(备份磁盘 500G)

    • 1. 操作系统配置

      # 关闭防火墙
      systemctl stop firewalld.service
      systemctl status firewalld.service
      systemctl disable firewalld.service


      # 配置内核参数
      cat >> /etc/sysctl.conf <<EOF
      fs.file-max = 6815744
      fs.aio-max-nr = 1048576
      kernel.shmmni = 4096
      kernel.sem = 250 32000 100 128
      net.ipv4.ip_local_port_range = 9000 65500
      net.core.rmem_default = 4194304
      net.core.rmem_max = 4194304
      net.core.wmem_default = 262144
      net.core.wmem_max = 1048576
      vm.dirty_ratio = 80
      vm.dirty_expire_centisecs = 500
      vm.dirty_writeback_centisecs = 100
      kernel.core_pattern = dmdata/core.%e_%p_%t
      vm.swappiness=10
      vm.dirty_background_ratio = 0
      vm.min_free_kbytes = 512000
      EOF
      sysctl -p


      # 配置资源限制
      cat >> etc/security/limits.conf <<EOF
      dmdba soft nice 0
      dmdba hard nice 0
      dmdba soft as unlimited
      dmdba hard as unlimited
      dmdba soft fsize unlimited
      dmdba hard fsize unlimited
      dmdba soft nproc 65536
      dmdba hard nproc 65536
      dmdba soft nofile 65536
      dmdba hard nofile 65536
      dmdba soft core unlimited
      dmdba hard core unlimited
      dmdba soft data unlimited
      dmdba  hard      data       unlimited
      EOF


      # 关闭透明大页
      vi etc/default/grub
      GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet numa=off transparent_hugepage=never"
      grub2-mkconfig -o etc/grub2.cfg
      reboot now


      # 禁用swap分区
      vi /etc/fstab 
      # 注释swap分区配置
      swapoff
      复制
      • 2. 用户、目录和环境变量配置

        groupadd dinstall -g 1001
        useradd  -g dinstall -m -d /home/dmdba -s /bin/bash -u 1001 dmdba
        echo 'dmdba#2024' | passwd --stdin dmdba


        mkdir -p /dmdbms /dmdata /dmbackup
        chown dmdba.dinstall -R dmdbms dmdata /dmbackup
        mount /dev/sdb /dmdbms
        mount /dev/sdc /dmdata
        mount /dev/sdd /dmbackup


        cat >> /home/dmdba/.bash_profile <<EOF
        export DM_HOME=/dmdbms
        export PATH=\$PATH:\$DM_HOME/bin
        export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:\$DM_HOME/bin
        EOF
        复制
        • 3. 数据库软件安装

          # 上传介质到/tmp
          mount -o /tmp/dm8_20240712_x86_rh7_64.iso /mnt


          # 安装数据库
          su - dmdba
          cd /mnt
          ./DMInstall.bin -i
          选择安装程序的语言 c/C 为中文,e/E 为英文。
          提示是否安装 key 文件,输入 N 跳过。
          选择时区,21 即东 8 区。
          选择安装类型,默认典型安装(包含所有内容)。
          选择软件安装目录,默认/home/dmdba/dmdbms,输入/dmdbms设置软件安装目录
          确认安装
          安装完成提示使用root执行脚本:
          /dmdbms/script/root/root_installer.sh
          复制
          • 4. 初始化数据库

            dminit path=/dmdata page_size=32 extent_size=32 charset=1 log_size=2048 db_name=dmdb instance_name=dmdb SYSDBA_PWD="dameng#2024" SYSAUDITOR_PWD="dameng#2024"
            注意:
            1. 初始化参数中除了 path 参数必须指定,其它参数都有默认值;
            2. 如果需求与默认值不同,初始化的时候请指定需要的值。因为部分参数初始化后是无法修改的例如:page_size(页大小),charset(字符集),case_sensitive(大小写敏感)等。更多参数./dminit help 查看,是否无法修改的参数可以查询 v$dm_ini 视图,para_type=’READ ONLY’ 表示无法修改。
            3. key与版本一定要匹配,key也是区分企业版和安全版
            复制
            • 5. 注册服务并启动实例

              cd /dmdbms/script/root/
              ./dm_service_installer.sh -t dmserver -p dmdb -dm_ini /dmdata/dmdb/dm.ini
              systemctl start DmServicedmdb
              复制
              • 6. 归档配置

                disql SYSDBA/'"dameng#2024"'@localhost:5236
                alter database mount;
                alter database add archivelog 'dest=/dmdata/arch ,TYPE=local,FILE_SIZE=1024,SPACE_LIMIT=102400';
                alter database archivelog;
                alter database open;
                call sp_set_para_value(1,'RLOG_APPEND_LOGIC',1) ;
                复制
                • 7. 备份策略配置

                • 1. 全量备份:每周六凌晨2点

                • 2. 增量备份:除周六外每天凌晨2点

                • 3. 删除备份:每天凌晨3点

                  disql SYSDBA/'"dameng#2024"'@localhost:5236
                  -- 创建作业系统表
                  SP_INIT_JOB_SYS(1);


                  -- 全量备份(每周六凌晨2点)
                  call SP_CREATE_JOB('bakfull',1,0,'',0,0,'',0,'');
                  call SP_JOB_CONFIG_START('bakfull');
                  call SP_ADD_JOB_STEP('bakfull''bak1'6'/dmbackup'0000, NULL, 0);
                  call SP_ADD_JOB_SCHEDULE('bakfull''std1'121640'23:00:00', NULL, '2024-09-01 20:00:00', NULL, '');
                  call SP_ADD_JOB_SCHEDULE('bakfull', 'once', 1, 0, 0, 0, 0, NULL, NULL, sysdate+1/1440, NULL, '');
                  call SP_JOB_CONFIG_COMMIT('bakfull');


                  -- 增量备份(除周六外每天凌晨2点)
                  call SP_CREATE_JOB('bakincr',1,0,'',0,0,'',0,'');
                  call SP_JOB_CONFIG_START('bakincr');
                  call SP_ADD_JOB_STEP('bakincr''bak2'6'/dmbackup'0000, NULL, 0);
                  call SP_ADD_JOB_SCHEDULE('bakincr''std2'121630'23:00:00', NULL, '2024-09-01 20:01:00', NULL, '');
                  call SP_JOB_CONFIG_COMMIT('bakincr');


                  -- 删除备份(每天凌晨3点)
                  call SP_CREATE_JOB('delbak',1,0,'',0,0,'',0,'');
                  call SP_JOB_CONFIG_START('delbak');
                  call SP_ADD_JOB_STEP('delbak','bak1',0'SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/dmbackup'');
                  call sp_db_bakset_remove_batch(''DISK'',now()-14);'1200, NULL, 0);
                  call SP_ADD_JOB_SCHEDULE('delbak''del01'11100'23:30:00', NULL, '2024-09-01 20:03:00', NULL, '');
                  call SP_JOB_CONFIG_COMMIT('delbak')
                  复制
                  • 8. 配置自动收集统计信息任务

                  • 每周六凌晨1点开始收集

                    disql SYSDBA/'"dameng#2024"'@localhost:5236
                    call SP_CREATE_JOB('statistics',1,0,'',0,0,'',0,'');
                    call SP_JOB_CONFIG_START('statistics');
                    call SP_ADD_JOB_STEP('statistics', 'statistics1', 0, 'begin
                    for rs in (select ''sf_set_SESSION_para_value(''''HAGR_HASH_SIZE'''',(select cast(
                    case when max(table_rowcount(owner,table_name))<=(select max_value from v$dm_ini
                    where para_Name=''''HAGR_HASH_SIZE'''') and max(table_rowcount(owner,table_name))>=(
                    select min_value from v$dm_ini where para_Name=''''HAGR_HASH_SIZE'''') then
                    max(table_rowcount(owner,table_name)) when max(table_rowcount(owner,table_name))<(
                    select min_value from v$dm_ini where para_Name=''''HAGR_HASH_SIZE'''') then
                    (select min_value from v$dm_ini where para_Name=''''HAGR_HASH_SIZE'''') else
                    (select max_value from v$dm_ini where para_Name=''''HAGR_HASH_SIZE'''') end as bigint)
                    from dba_tables where owner=''''''||NAME||''''''));''
                    sql1,''DBMS_STATS.GATHER_SCHEMA_STATS(''''''||NAME||'''''',100,TRUE,''''FOR ALL COLUMNS SIZE AUTO'''');''
                    sql2
                    from SYS.SYSOBJECTS where TYPE$=''SCH'' ) loop
                    execute immediate rs.sql1;
                    execute immediate rs.sql2;
                    end loop;
                    end;', 0, 0, 0, 0, NULL, 0);
                    call SP_ADD_JOB_SCHEDULE('statistics''statistics1'121640'01:00:00'NULL'2024-09-06 20:10:37'NULL'');
                    call SP_JOB_CONFIG_COMMIT('statistics')
                    复制
                    • 9. 配置sql日志

                      #记录1.5s以上的sql
                      vi /dmdata/dmdb/sqllog.ini 
                      BUF_TOTAL_SIZE = 10240
                      BUF_SIZE = 1024
                      BUF_KEEP_CNT = 6
                      [SLOG_ALL]
                      FILE_PATH = ../log
                      PART_STOR = 1
                      SWITCH_MODE = 2
                      SWITCH_LIMIT = 512
                      ASYNC_FLUSH = 1
                      FILE_NUM = 5
                      ITEMS = 0
                      SQL_TRACE_MASK = 2:3:25
                      MIN_EXEC_TIME = 1500
                      USER_MODE = 0
                      USERS = 
                      复制
                      • 10. 数据库参数优化

                        # 执行优化脚本
                        disql SYSDBA/'"dameng#2024"'@localhost:5236 \`Para_Optimization.sql
                        # 重启数据库
                        systemctl start DmServicedmdb
                        复制



                        本文内容就到这啦,阅读完本篇,相信你已经掌握对达梦数据库的单机形态的标准化部署了吧!我们下篇再见!

                        点击上方公众号,关注我吧!

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

                        评论