none
在 Linux 上配置 SQL Server AlwaysOn 可用性组 (AG) 出现的CPU使用率超高 RRS feed

  • 问题

  • 环境:

    Vmware workstation16

    1:centos8_1(主副本) + sql server 2019 15.0.4073.23

    2:centos8_2(辅助副本) + sql server 2019 15.0.4073.23

    3:Win server2019(辅助副本) + sql server 2019 15.0.2000.5

    根据SQL文档创建AlwaysOn 可用性组

    https://docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-availability-group-configure-rs?view=sql-server-ver15

    经测试两辅助副本均能正常同步主副本的数据.

    问题:

    在centos8_2(辅助副本)中,一旦开启SQL Server AlwaysOn ,CPU的使用率会根据所同步的数据库数量成正比地提高,期间主副本是没有数据写入或更新.

    在Win server2019(辅助副本)中同样的数据库同步,则没此情况.



    求解决在Linux系统中Sql server的AlwaysOn 可用性组 (AG) 出现的CPU使用率超高的情况

    • 已编辑 上汤麻雀 2020年11月20日 17:22 内容重复
    2020年11月20日 17:22

全部回复

  • CPU的使用率会根据所同步的数据库数量成正比地提高,期间主副本是没有数据写入或更新

    ----------- 主副本没有数据写入?这同步的数据量是指的初始化的时候?除了 CPU 高,磁盘的 IO 怎么样?

    2020年11月23日 0:39
  • 主副本创建的数据库均为空库.辅助副本在没有加入AG前,CPU使用率为4%,在完成5个数据库的同步后,CPU使用率一直维持在50%左右,如果同步更多的数据库,则会更高.

    没有数据写入,磁盘IO很低.


    2020年11月23日 2:50
  • 你好,

    此文档是作为在 Linux 上配置 SQL Server 可用性组用于读取缩放的指导,其中辅助副本的配置也是适用于Linux.但是您是使用相同方法成功配置了windows上的辅助副本吗?请确保AOAG已成功部署且所有副本运行正常。可以使用SSMS直接连接到主副本或者辅助副本,可以查看到可用性组/可用性副本/可用性数据库的相关情况,另外检查仪表板(Dashboard)以查看可用性组的健康状况。或者查询Always on相关视图。

    对于您所说的副本副本CPU使用率高的问题,您是否已经配置此副本作为只读次要副本?当前是否有工作负载。

    另外观察到您windows上的SQL Server实例版本(15.0.2000.5)与其他实例不一致,可以安排更新(sql server 2019 CU8)以保持所有实例版本的一致。

    2020年11月23日 3:25
  • 根据sql文档操作, windows上的辅助副本是成功部署,

    此windows副本是因为centos8的辅助副本cpu使用率过高而另外安装的

    验证AG可用性在windows环境中cpu使用率是否同样过高.

    在此论坛无法上传图片和张贴链接,但下面的网址中有上传图片

    https://answers.microsoft.com/zh-hans/windows/forum/windows_other-winapps/%E5%9C%A8-linux-%E4%B8%8A%E9%85%8D%E7%BD%AE-sql/b2491996-9db0-4f6f-8209-4585eb4c1498?tm=1605891811124






    2020年11月23日 9:19
  • 你好,

    打开您以上回复中贴出的网址,我可以看到问题及相关图片。其中仪表板上显示可用性组一切正常,AG处于健康状态。请尝试在仪表板内选择增加几个观测指标(添加/删除列),以观察是否有任何异常。另外最好检查SQL Server错误日志以确保AG是运行正常的。

    另外您展示的Centos8辅助副本上CPU使用情况的图片,由于我没有Linux的操作经验,不清楚如何Linux上检测应用的CPU使用情况,所以抱歉无法判断SQL Server服务的CPU使用率是否很高。但我观察到此图片中的命令窗口的抬头位置有如下信息:
    %Cpu(s): 4.0 us, 12.3 sy,.., 82.8 id....

    根据我搜索的以下文章,似乎id意味着空闲进程。
    https://www.mssqltips.com/sqlservertip/4683/linux-administration-for-sql-server-dbas-checking-cpu-usage/
    http://www.dharmendrakeshari.com/top-htop-check-health-sql-server-linux/

    您能否可以使用SSMS连接centos8_2(辅助副本),运行报告>性能仪表板以观察此副本上的SQL ServerCPU使用情况。

    2020年11月24日 1:37
  • 确实会有这个问题,不确定是否跟虚拟机有关系,我发现 SQL Server 开了很多个线程(ps -Lf sqlservr的pid),然后用 top -H -p sqlservr的pid 查看线程的 CPU 开销,发现每个线程的 CPU 开销其实并不大

    初步怀疑是不是虚拟机太差了一点,而 SQL SERVER 的同步工作线程又多,频繁的检查什么导致 CPU不断在线程间切换导致,如果楼主有比较好的机器,可以在测试一下情况(尝试一下按照微软官方的建议做 CPU 关联(PROCESS AFFINITY))

    2020年11月25日 12:50
  • 由于Technet中还没通过身份验证,无法上传图片来辅佐说明,实在抱歉.

    我也查看过linux中sqlservr的线程,大约200个左右,开启AG后,闲置的线程会根据数据库的增多而提升cpu占用,大约是2~3%,但sqlservr主线程会显示提高很多.

    由于是仅用于数据热备,所以没使用性能太高的机器

    目前测试过的机器有两种配置,一种是xeon E5-2678 V3, 64G Ram,系统为win10+vm workstation16(就是主贴上的系统环境),

    另一台配置为cpu i5-6600t,8G Ram,作为物理机直接安装centos8 + mssql,排除虚拟机带来的性能损失

    配置为辅助副本后,结果也是一样,随数据库的增多而不断占用CPU..cpu关联是"自动设置所有处理器*******"

    这台机器,尝试过安装win server2019 +sqlserver 2019,设置为辅助副本(sqlnode3),

    同时在win server2019上安装vm workstation 16,再在虚拟机中安装centos8(或Ubuntu18)+sqlserver 2019,设置为辅助副本(sqlnode4),这两辅助副本是同时链接到sqlnode1这个主副本.

    通过windows的任务管理器,可以很明显地看出win的辅助副本sqlserver的cpu占用率只有1~4%,linux的辅助副本,cpu则飙升到25%以上.

    主副本增加数据库,没有其他的数据写入删除操作,win辅助副本的cpu占用率没什么变化,linux的辅助副本cpu占用会不断飙升.

    经过这几天的不断尝试,我已经快要放弃在linux上的sql server的always on可用性组功能了.






    2020年11月27日 4:51
  • pu关联是"自动设置所有处理器*******"

    ---- 这个设计一下,不要用自动,官方强烈推荐在 Linux 下设置关联,我测试了一下,关联之后 CPU 的使用确实会有下降,我虚拟机测试不关联大约在40%+,关联后下降到 30%-,效果还是较为明显

    2020年11月27日 13:48
  • 另外,你是物理机的话,还可以参考官方的推荐配置一下内核参数

    2020年11月27日 13:49
  • pu关联是"自动设置所有处理器*******"

    ---- 这个设计一下,不要用自动,官方强烈推荐在 Linux 下设置关联,我测试了一下,关联之后 CPU 的使用确实会有下降,我虚拟机测试不关联大约在40%+,关联后下降到 30%-,效果还是较为明显

    设置关联下降后的占用率,跟win系统中的sql服务1~4%的占用率,实在是无法比较.

    物理机只是用来测试对比,实际生产环境还是要在虚拟机中.所以应该是只能放弃linux的sql server了.

    感谢您的关注.



    2020年11月28日 2:17