最近几年,无论是商业、开源、分布式、云原生等越来越多的国产数据库如雨后春笋般悄然出现在公众的视野。面对这么多种国产数据库,无论对客户还是我们数据库从业人员,难免会产生一种眼花缭乱的现象。根据国产数据库流行度排行榜及市场占有率热度,个人认为数据库在市场上存在二条赛道,近10年可能会并行运行。
第一条赛道是传统数据库,国产达梦数据库是唯一一个可以跟国外Oracle抗衡的。经过近段时间的研究,DM8数据库不仅在语法、易用性、功能、性能上完全可以和Oracle媲美,甚至在某些功能、性能和配套工具上远远超过了国外的Oracle数据库,没有做实验之前觉的达梦数据库可能很一般,做完DM8单机、DMDataWatch主备集群、DMDSC共享存储集群、DMDPC分布式集群后改变了对它的认知,“国产传统数据库龙头第一把交椅非达梦莫属”。另一条赛道是基于开源的分布式数据库,像TiDB、OceanBase 、PolarDB、GaussDB等为代表的头部厂商,分布式数据库可有效解决现有互联网环境下海量数据、高并发计算的数据需求,成为国产数据库厂商的产品发展共识,也是未来主流架构之一。
适用于所有技术人员,数据库爱好者,数据库初学者。
语法格式:ls [选项] [文件]
常用参数
参数名 |
解释 |
-a |
显示所有文件及目录 (包括以“.”开头的隐藏文件) |
-l |
显示文件和目录的详细资料 |
-t |
根据最后的修改时间排序 |
-trl |
按时间显示所有文件及目录 |
-A |
同 -a ,但不列出 “.” (当前目录) 及 “…” (父目录) |
-S |
根据文件大小排序 |
-R |
递归列出所有子目录 |
语法格式: cd [选项] [文件]
常用参数
参数名 |
解释 |
/dir |
进入指定目录 |
~ |
进入用户主目录 |
- |
返回之前所在的目录 |
.. |
返回上级目录 |
../.. |
返回上两级目录 |
语法格式 : mkdir [参数] [目录]
常用参数
参数名 |
解释 |
-p |
建多级目录 |
-p /dir{a_dir,b_dir} |
一次性建多个目录 |
-v |
显示目录的创建过程 |
-R |
强制创建目录 |
语法格式: rm [参数] [文件]
常用参数
参数名 |
解释 |
-f |
忽略不存在的文件,不会出现警告信息 |
-i |
删除前会询问用户是否操作 |
-r/R |
递归删除 |
-v |
显示指令的详细执行过程 |
语法格式: cp [参数] [文件]
常用参数
参数名 |
解释 |
cp file1 file2 |
复制一个文件 |
-f |
若目标文件已存在,则会强制覆盖原文件 |
-i |
若目标文件已存在,则会询问是否覆盖 |
-p |
保留源文件或目录的所有属性 |
-r |
递归复制文件和目录 |
-rp |
复制目录及文件 |
-v |
详细显示cp命令执行的操作过程 |
语法格式: less [参数] [文件]
常用参数
参数名 |
解释 |
-b |
置缓冲区的大小 |
-e |
当文件显示结束后,自动离开 |
-f |
强制打开特殊文件 |
-g |
只标志最后搜索的关键词 |
-i |
忽略搜索时的大小写 |
-m |
显示类似more命令 |
-N |
显示每行的行号 |
-o |
将less 输出的内容在指定文件中保存起来 |
-Q |
不使用警告音 |
-s |
显示连续空行为一行 |
-S |
在单行显示较长的内容,而不换行显示 |
-x |
将TAB字符显示为指定个数的空格字符 |
命令内部操作:
b 向后翻一页
d 向后翻半页
h 显示帮助界面
Q 退出less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一页
回车键 滚动一行
语法格式:mv [参数]
常用参数:
参数名 |
解释 |
-i |
若存在同名文件,则向用户询问是否覆盖 |
-f |
覆盖已有文件时,不进行任何提示 |
-b |
当文件存在时,覆盖前为其创建一个备份 |
-u |
当源文件比目标文件新,或者目标文件不存在时,才执行移动此操作 |
语法格式:tail [文件]
参数名 |
解释 |
tail file |
显示文件file的最后10行 |
tail +20 file |
显示文件file的内容,从第20行至文件末尾 |
tail -c 10 file |
显示文件file的最后10个字符 |
tail -f 10 file |
一直变化的文件总是显示后10行 |
语法格式:df [文件]
参数名 |
解释 |
df -h |
显示挂载分区及磁盘使用情况 |
df -Th |
显示挂载分区类型及磁盘使用情况 |
ls -lSr |more |
以尺寸大小排列文件和目录 |
du -sm dir |
估算目录dir #占用磁盘空间大小,单位MB |
du -sh dir |
估算目录dir占用磁盘空间大小,单位GB |
du -sm * | sort -rn |
以容量大小为依据依次显示文件和目录的大小,单位MB |
语法格式:vi [参数] [文件]
参数名 |
解释 |
vi filename |
打开或新建文件并将光标置于第一行首 |
vi +n filename |
打开文件,并将光标置于第n行首 |
vi + filename |
打开文件,并将光标置于最后一行首 |
vi -r filename |
在上次正用vi编辑时发生系统崩溃,恢复 filename |
:q |
退出 |
:q! |
强制退出 |
:w |
保存编辑内容 |
:wq |
保存并退出 |
:wq! |
强制保存并退出 |
:set number或:set nu |
显示行号 |
:set nonumber或:set nonu |
取消显示行号 |
语法格式:mount [参数]
参数名 |
解释 |
mount /dev/hda2 /soft |
挂载hda2的盘到soft目录 |
umount /dev/hda2 |
卸载hda2的盘 |
fuser -km /mnt/hda2 |
当设备繁忙时强制卸载 |
umount -n /mnt/hda2 |
运行卸载操作而不写入 |
mount /dev/fd0 /mnt/floppy |
挂载一个软盘 |
mount /dev/cdrom /mnt/ |
挂载一个cdrom |
mount -o loop file.iso /mnt |
挂载一个ISO镜像文件 |
mount -t vfat /dev/hda5 /mnt/hda5 |
挂载一个Windows FAT32文件系统 |
mount /dev/sda1 /mnt/usbdisk |
挂载一个usb 捷盘或闪存设备 |
参数名 |
解释 |
groupadd dinstall |
创建dinstall用户组 |
groupdel dinstall |
删除dinstall用户组 |
groupmod -n new_group_name old_group_name |
重命名一个用户组 |
useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba |
创建dmdba用户属dinstall组 |
useradd dmdba |
创建dmdba新用户 |
userdel dmdba |
删除dmdba用户 |
passwd dmdba |
设置/修改dmdba密码(只允许root执行) |
chage -E 2028-12-31 dmdba |
设置用户口令的失效期限 |
参数名 |
解释 |
r |
4 |
w |
2 |
x |
1 |
rwxrw-r-x(765) |
所有者rwx=4+2+1=7 所属组rw=4+2=6 其它人r-x=4+1=5 |
rwxrwxrwx(777) |
所有者rwx=4+2+1=7 所属组rwx=4+2+1=7 其它人rwx=4+2+1=7 |
rwxrwxr-x(775) |
所有者rwx=4+2+1=7 所属组rwx=4+2+1=7 其它人r-x=4+1=5 |
chmod -R 775 /dm8 |
对dm8目录及下面子目录全部设置775权限 |
chown -R dmdba:dinstall /dm8 |
对dm8目录及下面子目录全部设置dmdba:dinstall属组 |
# nkvers
# cat /etc/.productinfo
# cat /etc/os-release | grep "PRETTY_NAME"
# cat /etc/redhat-release
# cat /proc/version
Linux version 4.19.90-52.22.v2207.ky10.x86_64 ([email protected]) (gcc version 7.3.0 (GCC)) #1 SMP Tue Mar 14 12:19:10 CST 2023
# uname -a
Linux dm8db01 4.19.90-52.22.v2207.ky10.x86_64 #1 SMP Tue Mar 14 12:19:10 CST 2023 x86_64 x86_64 x86_64 GNU/Linux
# uname -r
4.19.90-52.22.v2207.ky10.x86_64
# cat /proc/version
Linux version 3.10.0-957.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP Thu Oct 4 20:48:51 UTC 2018
# uname -a
Linux dm8db02 3.10.0-957.el7.x86_64 #1 SMP Thu Oct 4 20:48:51 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
# uname -r
3.10.0-957.el7.x86_64
# getconf LONG_BIT
64
# getconf LONG_BIT
64
# uname -m
x86_64
# uname -m
x86_64
命令:
#cat /proc/cpuinfo |grep "model name"|sort|uniq
model name : Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
# lscpu
参数说明:
Architecture:服务器架构
CPU op-mode(s):CPU模式
CPU(S):CPU颗数
Core(s) per socket: CPU核数
Model name:CPU详细信息
cpu个数
# lscpu | grep "CPU(s):"
# cat /proc/cpuinfo|grep "physical id"|sort|uniq|wc -l
1
命令:
# ifconfig -a
# ip -a
# ethtool ens33
#df -h
#df -Th
# lsblk
# cat /sys/block/sda/queue/scheduler
# swapon -s
磁盘缓存策略是否开启
--直接写
# dd if=/dev/zero of=/tmp/test01.dbf bs=32k count=10k
--缓存写
# dd if=/dev/zero of=/tmp/test01.dbf bs=32k count=10k oflag=sync
--直接读
dd if=/dev/zero of=/tmp/test01.dbf if=/tmp/test01.dbf bs=32k count=10k
--缓存读
# dd if=/dev/zero of=/tmp/test01.dbf if=/tmp/test01.dbf bs=32k count=10k oflag=sync
注:测试命令不要在生产环境运行。
#top
# free -m #单位M
# free -h #单位G
# sar -n DEV 1 100
临时修改
#临时关闭 swap 分区,重启后失效
# swapoff -a
永久修改
#永久关闭 swap 分区
# sed -ri 's/.*swap.*/#&/' /etc/fstab
#重启操作系统
# reboot
#再次确认
# free -m
# date -s "yyyy-mm-dd HH:MM:SS"
# date -s "2024-01-05 15:28:00"
cat >> /etc/hosts << EOF
xx.xx.xx.xx dm8db01
EOF
vi /etc/hostname
或者
hostnamectl set-hostname [主机名]
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/enforcing/disabled/' /etc/selinux/config
#临时
setenforce 0
#查看防火墙端口开放情况:
##redhat 6
iptables -L
#redhat 7/8
firewall-cmd --zone=public --list-ports
方式一:修改系统文件,永久更改,需重启防火墙服务
# vi /etc/sysconfig/iptables
-A INPUT -p tcp -m tcp --dport 5236 -j ACCEPT #添加 5236 端口到防火墙
# service iptables save;service iptables restart; #保存后重启防火墙
方式二:命令行添加端口,永久更改,需重启防火墙服务
# iptables -A INPUT -s 0.0.0.0/0.0.0.0 -p tcp --dport 5236 -j ACCEPT
# service iptables save;service iptables restart; --保存后重启防火墙
注意
修改文件配置后,需重启防火墙服务。
#添加(--permanent 永久生效,没有此参数重启后失效)
firewall-cmd --zone=public --add-port=5236/tcp --permanent
#重新载入
firewall-cmd --reload
#查看
firewall-cmd --zone=public --query-port=5236/tcp
#删除
firewall-cmd --zone=public --remove-port=5236/tcp --permanent
注意
添加端口到防火墙时,使用 --permanent 后才能永久生效,否则重启后失效。
NUMA(Non-Uniform Memory Access)架构是为了解决多 CPU 下内存访问冲突,即不再将整个物理内存作为一个整体,而是根据不同的 CPU 区分不同的内存块,如 2 颗 CPU 每颗 CPU 使用 64G 内存。
当 NUMA 参数 zone_reclaim_mode 设置为 1 时,内核将要求多路 CPU 尽量从距离较近的系统内存节点(服务器的整体内存在 numa 架构下将被分成若干个节点)分配内存,而不是在整个服务器可访问内存的范围内进行内存分配。因此,在较高内存占用压力下,内存申请会触发内存频繁回收整理的机制,严重影响系统整体性能(长期处于内核态 sys 很高),进而可能导致 SQL 卡顿问题的发生。
# vi /etc/default/grub
加上:numa=off
#新生成 /etc/grub2.cfg 配置文件:
grub2-mkconfig -o /etc/grub2.cfg
#重启操作系统
# reboot
#重启之后进行确认
# dmesg | grep -i numa
#再次确认
# cat /proc/cmdline
Transparent HugePages (透明大页)对系统的性能产生影响的原因:
在 khugepaged 进行扫描进程占用内存,并将 4k Page 交换为 Huge Pages 的这个过程中,对于操作的内存的各种分配活动都需要各种内存锁,直接影响程序的内存访问性能。并且,这个过程对于应用是透明的,在应用层面不可控制,对于专门为 4k page 优化的程序来说,可能会造成随机的性能下降现象。
#临时修改
#查看是否启用透明大页
# cat /sys/kernel/mm/transparent_hugepage/enabled
[always]表示透明大页启用
[never] 表示透明大页禁用
#禁用透明大页(临时)
# echo never > /sys/kernel/mm/transparent_hugepage/enabled
#禁用透明大页(永久)
# vi /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
#加入grub
# vi /etc/default/grub
添加
transparent_hugepage=never
#重新生成 /etc/grub2.cfg 配置文件:
# grub2-mkconfig -o /etc/grub2.cfg
#重启操作系统
# reboot
#再次确认
# cat /sys/kernel/mm/transparent_hugepage/enabled
(1) 查看透明大页内存
#使用下图中命令查看当前操作系统透明大页内存配置
# grep -i huge /proc/meminfo
# cat /sys/kernel/mm/transparent_hugepage/enabled
从上面输出可以看到,每个页的大小为 2MB(Hugepagesize),并且系统中目前有 0 个“大内存页”(HugePages_Total)。而当前的透明大页内存配置是开启的(always)。
(2) 关闭透明大页内存。
#通过修改 grub 配置,在 “GRUB_CMDLINE_LINUX=” 配置参数结尾加入 “transparent_hugepage=never”,可以永久关闭透明大页内存。
# vim /etc/default/grub
(3) 重新生成 grub 配置。
#如果操作系统安装时,使用 Legacy 模式引导安装,则使用以下命令重新生成 grub。
# grub2-mkconfig -o /boot/grub2/grub.cfg
#如果操作系统安装时,使用 UEFI 模式引导安装,则使用以下命令重新生成 grub。
# grub2-mkconfig -o /boot/efi/EFI/kylin/grub.cfg
(4) 生成 grub 后,重启操作系统查看配置。
可以看到系统中目前透明大页内存为 0,并且禁用透明大页内存(never)。查看 /sys/kernel/mm/transparent_hugepage/defrag 配置文件缺省配置为 “madvise”。
如需永久修改配置为 “never”,需在 /etc/rc.local 中添加如下内容。
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
/etc/sysctl.conf 是一个允许改变正在运行中的 Linux 系统接口,它包含一些 TCP/IP 堆栈和虚拟内存系统的高级选项,修改内核参数永久生效。/proc/sys 下内核文件与配置文件 sysctl.conf 中变量存在着对应关系。
配置参数 overcommit_memory 表示系统的内存分配策略可以选值为 0,1,2。
0:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1:表示内核允许分配所有的物理内存,不管当前的内存状态如何。
2:表示内核允许分配超过所有物理内存和交换空间总和的内存。
临时生效和永久生效:
#临时生效
#使用 root 执行命令:
# echo 0 > /proc/sys/vm/overcommit_memory
#查看执行结果:
# cat /proc/sys/vm/overcommit_memory
#永久生效
#用root用户编辑配置文件编辑/etc/sysctl.conf
# vim /etc/sysctl.conf
#修改vm.overcommit_memory=0
然后执行 sysctl -p 使配置文件生效:
在 Linux、Solaris、AIX 和 HP-UNIX 等系统中,操作系统默认会对程序使用资源进行限制。如果不取消对应的限制,则数据库的性能将会受到影响。
临时修改
#查询当前系统资源限制
# ulimit -a
#设置open files 65536 以上或 unlimited、设置 max user processes为10240
# ulimit -n 65535 #临时修改 open files 为65535
# ulimit -u 10240 #临时修改 max user processes为10240
# ulimit -a #查看修改是否生效
• 永久修改
#编辑 limits.conf 文件
# vi /etc/security/limits.conf
#在最后面添加以下内容
* soft nproc 10240
* hard nproc 10240
dmdba soft nproc 10240
dmdba hard nproc 10240
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba hard data unlimited
dmdba soft data unlimited
dmdba hard fsize unlimited
dmdba soft fsize unlimited
dmdba soft core unlimited
dmdba hard core unlimited
# ulimit -a #确认是否生效
#重启操作系统
[root@]# reboot
#再次确认
# ulimit -a
1.data seg size
data seg size (kbytes, -d)
建议用户设置为 1048576(即 1GB)以上或 unlimited(无限制),此参数过小将导致数据库启动失败。
2. file size
file size(blocks, -f)
建议用户设置为 unlimited(无限制),此参数过小将导致数据库安装或初始化失败。
3. open files
open files(-n)
建议用户设置为 65536 以上或 unlimited(无限制)。
4.virtual memory
virtual memory (kbytes, -v)
建议用户设置为 1048576(即 1GB)以上或 unlimited(无限制),此参数过小将导致数据库启动失败。
如果用户需要为当前安装用户更改 ulimit 的资源限制,请修改文件/etc/security/limits.conf。
system.conf为系统和服务管理的配置文件,当运行系统实例时,systemd 将读取这个配置文件system.conf,相反读取user.conf。
达梦数据库服务注册为系统服务的进程,如通过 systemctl 或者 service 方式设定随机自启动的数据库服务,其能打开的最大文件描述符、proc 数量等不受limits.conf控制,需要修改/etc/systemd/system.conf文件。
#编辑配置文件 /etc/systemd/system.conf
# vim /etc/systemd/system.conf
#添加配置:
DefaultLimitNOFILE=65536
DefaultLimitNPROC=10240
注意
保存退出后需要重启服务器才能生效。
nproc是操作系统级别对每个用户创建的进程数的限制。文件路径为/etc/security/limits.d/nproc。不同操作系统文件名略有不同,其中
麒麟 10 中是 nproc.conf
centos6 中是 90-nproccentos
centos7 中是 20-nproc.conf
/etc/security/limits.conf可配置限制文件打开数,系统进程等资源在该文件配置中写的最大用户进程数是受/etc/security/limits.d/proc.conf配置上限影响的。
soft 表示软限制,hard 表示硬限制,nproc 进程数,nofile 文件数
#cd /etc/security/limits.d
#cat nproc.conf
dmdba soft nproc 65536
dmdba hard nproc 65536
#编辑配置文件nproc.conf
# vi /etc/security/limits.d/nproc.conf
#添加配置:
dmdba soft nproc 65536
dmdba hard nproc 65536
#确定是否生效:
# ulimit -u
65536
若在/etc/security/limits.conf修改最大用户进程数,则注释掉/etc/security/limits.d/90-nproc.conf文件中的相关内容即可。
/etc/profile文件与环境变量相关,修改后对所有用户起作用。登录 Linux 时,会首先启动 /etc/profile文件,然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login 或 ~/.profile 文件中的其中一个。
/etc/profile 为全局(公有)配置,不管是哪个用户,登录时都会读取该文件.~/.profile 若 bash 是以 login 方式执行时,读取 ~/.bash_profile,若它不存在,则读取 ~/.bash_login,若前两者不存在,则读取 ~/.profile。
调整 dmdba 用户下的环境变量文件 .bash_profile。
(1) LD_LIBRARY_PATH 主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径。
(2) PATH 环境变量定义了用于进行命令和程序查找的目录, PATH 中的目录使用冒号分隔。
(3) DM_HOME 定义达梦数据库的软件目录。
su - dmdba
vi .bash_profile
export DM_HOME="/dm8"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/dm8/bin"
export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool
注意
保存文件后执行 source .bash_profile 生效。
# groupadd -g 10021 dinstall
# useradd -u 10022 -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
# passwd dmdba
# --<输入密码>
# --<再次输入密码>
mkdir -p /dm8/dmdbms
chown -R dmdba:dinstall /dm8
chmod -R 775 /dm8
日拱一卒,水滴石穿,循序渐进,将达梦数据库测试到底,下篇见。