【金蝶】云星空SQL数据库配置和优化

  • SQL数据库配置和优化
  1. 操作系统和数据库系统必须是64位

 

 

  1. 调整最大并行度=1

 

--调整最大并行度,建议修改为1,也可在数据库直接执行,修改方法如下:

sp_configure 'show advanced options', 1;
GO
RECONFIGURE WITH OVERRIDE;
GO
sp_configure 'max degree of parallelism', 1;
GO
RECONFIGURE WITH OVERRIDE;
GO

  1. 针对即席工作负荷进行优化=True

 

--调整针对即席工作负荷进行优化=True,也可在数据库直接执行,修改方法如下:

sp_configure 'show advanced options', 1;
GO
RECONFIGURE WITH OVERRIDE;
GO
sp_configure 'Optimize for Ad hoc Workloads', 1;
GO
RECONFIGURE WITH OVERRIDE;
GO

  1. 最大服务器内存=物理内存-4GB

建议最大内存配置为物理内存-4GB(预留4GB内存给数据库服务器所在的操作系统使用,如下图数据库服务器物理内存有32G,这里我们设置为28000MB就好了)

 

  1. 锁定内存页(组策略),用户为启动SQL Server的用户

路径:Windows设置-安全设置-本地策略-用户权限分配-锁定内存页

 

  1. 读提交快照处于打开状态=True 

 

操作步骤:

注意,客户环境下按照下面的顺序进行执行:

  1. 停止操作系统服务下面的K3CloudJobProcess和K3CloudManage服务;
  2. 停止IIS服务;
  3. 在数据库服务器按附1执行修改语句,检查无误后,执行;
  4. 重新启动IIS;
  5. 启动K3CloudJobProcess和K3CloudManage服务。

附1:

下面是执行修改的SQL语句:

--开启read_committed_snapshot隔离级别的方法,推荐值是1:

--打开SQL Server Management Studio,创建一个查询,然后执行下面的语句,

--查看数据库对应的is_read_committed_snapshot_on是否为0,如果为0,做第2步。

--请自行替换name字段值。

select name,is_read_committed_snapshot_on from sys.databases where name = 'AIS20140912092851'

--执行下面的SQL,开启读快照隔离级别。注意,执行的时候最好不要有人在使用数据库,

--否则由于KILL进程会导致客户端操作失败。

--请自行替换dbname字段值。

use master
declare @dbname as sysname
declare @sql varchar(max)

--@dbname='test'  为金蝶云星空对应的数据库名
set @dbname='AIS20140912092851'   

set @sql=''
select @sql=@sql+' kill '+cast(spid as varchar)+';' from master..sysprocesses where dbid=db_id(@dbname);
set @sql=@sql+'alter database '+@dbname+' set read_committed_snapshot on ' ;

exec(@sql);

--再次执行步骤1,如果对于那个数据库is_read_committed_snapshot_on的值为1,表示成功启用读快照隔离级别

  1. 每天索引重建

使用云报告生成,查看数据库表索引碎片超过30%的表的数量,如果该值大于100,说明索引碎片较高,需要管理员根据情况进行处理。

 

 

我们也可以根据一些比较重要的表的表索引碎片大于30%

比如:物料T_BD_Material,使用命令

dbcc ShowContig(‘T_BD_Material’)

,查看逻辑扫描碎片的百分比:

逻辑扫描碎片=35.85%大于30%,我们认为该数据库的索引碎片较多,影响到查询性能,建议重建索引和更新统计信息。

对数据查询速度要求较高,并且数据新增、删除、更新频繁,建议每天凌晨时分业务不繁忙的时候(比如凌晨3点),定期重建一次索引。

定时自动执行的方法:

方法一:使用金蝶云星空计划任务定期执行重建索引和更新统计信息。

详情可参考:

金蝶云社区|专业的产业互联网社区|财务金融企业信息化|IT精英人脉社群-金蝶云社区官网

执行定期重建索引和更新统计信息的后台计划任务未执行,原因排查:

第一步: 登录管理中心,检查数据中心是否勾选了 "允许执行计划任务"

 

第二步:查看金蝶云星空服务器,K3CloudJobProcess服务是否启用

第三步:确认重建索引和更新统计信息的执行计划设置是否正确?

开始时间:必须在今天之前

结束时间:必须在今天以后

任务状态:必须是准备状态

 

第四步:检查Windows系统日志,查看执行计划是否有出错

 

第五步:检查重建索引和更新统计信息的执行计划最近一次执行情况

如果执行时间已经刷新,且记录了最近一次执行情况,则说明执行计划能正常调用

 

方法二:使用SQL Server的维护计划向导新建一个重新生成索引的维护任务。

 

维护计划执行需要把SQLServerAgent服务启动起来。

 

手工执行办法:

方法一:登录管理中心,使用数据中心列表的升级下拉功能:数据库优化,进行索引重建和更新统计信息。这个过程可能运行较长时间,并且会导致表阻塞,影响系统性能,请在非系统频繁使用期,进行优化。

 

方法二:手工简单重建索引办法

--在对应的业务数据库执行下列的语句:

declare @sql varchar(max)
set @sql=''
select @sql=@sql+'dbcc dbreindex('+name+');' from sys.tables where name not like 'tm%'
exec(@sql)

注意:

  • 打补丁后,特别是跨度较大的补丁,建议手工重建一次;
  • 请在业务空闲期执行重建索引的语句或任务;

  1. 查看临时表数量和清理临时表

可通过下列SQL语句查询和统计可删除的临时表数量:

--临时表数量统计

SELECT count(T.NAME) AS COUNT_DEL
FROM
SYS.TABLES T
WHERE
EXISTS (SELECT 1
FROM
T_BAS_TEMPORARYTABLENAME
WHERE
FTABLENAME = T.NAME
AND (FCREATEDATE <= getdate() - 1
OR FPROCESSTYPE = 1)) 

如果临时表很多,想统计下临时表占用空间,可使用下面的语句进行统计分析:

-- 查看系统所有临时表占用的总空间

select cast(sum(a.total_pages)*8/1024 as varchar)+' MB' total 		 
from sys.partitions p join sys.allocation_units a on p.partition_id = a.container_id
join sys.tables it on p.object_id = it.object_id
where it.name like 'TMP%'

-- 查询系统中每个临时表占用的空间大小统计

select it.name, cast(sum(a.total_pages)*8 as varchar)+'KB' total 		 
from sys.partitions p join sys.allocation_units a on p.partition_id = a.container_id
	join sys.tables it on p.object_id = it.object_id
where it.name like 'tm%'
group by  it.name
order by sum(a.total_pages)*8 desc

--删除所有已经标记为需要删除的临时表,如果临时表太多,超过2w,不建议使用该语句删除临时表

declare @sql as varchar(max)
set @sql=''
select @sql=@sql+'drop table '+name+';' from sys.tables u
join T_BAS_TEMPORARYTABLENAME v on u.name=v.FTABLENAME and 
( v.FPROCESSTYPE=1 or v.FCREATEDATE<GETDATE()-1);
exec(@sql);
delete u from T_BAS_TEMPORARYTABLENAME u where 
not exists(select 1 from sys.tables where u.ftablename=name );

--如果临时表太多,超过2w,建议使用SQL的定时作业来删除临时表

具体可参考:

金蝶云社区|专业的产业互联网社区|财务金融企业信息化|IT精英人脉社群-金蝶云社区官网

另外,我们可通过执行下面3个查询数量,根据查询数量的情况,来判断临时表方面的问题:

select count(*) from T_BAS_TEMPORARYTABLENAME where FPROCESSTYPE=1 or FCREATEDATE<GETDATE()-1
select count(*) from T_BAS_TEMPORARYTABLENAME 
select count(*) from sys.tables t where name like 'tmp%' 

--如果语句1的记录很多(正常值一般1000内),那么后台删除临时表的作业肯定有一段时间没有运行;

--如果语句2的记录很多(正常值一般10000内),那么说明有临时表残留;

--如果语句3的记录很多(正常值一般10000内),并且如果语句3远大于语句2的记录数,说明很多生成的临时表没有记录到登记表中,属于异常情况,一般是二开或其他原因导致的临时表问题,如果这个记录数一直增长,那么需要手工执行删除临时表的语句。

SQLserver手工删临时表的方法(可在业务期间运行,推荐使用该方法删除临时表):

--第一步:删除登记表中的可删除的临时表登记记录

delete from T_BAS_TEMPORARYTABLENAME where FPROCESSTYPE=1 or FCREATEDATE<GETDATE()-1

--第二步:删除临时表,每次删除50个临时表释放一次资源,可在业务运行期间执行语句

if object_id('temptb','table')>0 drop table temptb;
 declare @sql varchar(max)
 declare @icount int
 declare @I int
 set @sql='drop table '
 set @i=1
 select name,IDENTITY(int,1,1) id into temptb from sys.tables t where name like 'tmp%' and len(name)=30 and name not like 'tmp[_]%' 
 and not exists(select 1 from T_BAS_TEMPORARYTABLENAME where FTABLENAME=t.name) and create_date<=DATEADD(n,-5, GETDATE())
 select @icount=@@ROWCOUNT
 while @i<@icount
 begin
   select @sql=@sql+name+',' from temptb where id between @i and @i+49
   if @@ROWCOUNT>0
       set @sql=substring(@sql,1,len(@sql)-1)+';'
   set @i=@i+50
   exec(@sql)
   set @sql='drop table '
 end
 if object_id('temptb','table')>0 drop table temptb;

--清理视图定义
declare @sql varchar(max)
set @sql=''
select @sql=@sql+'drop view '+name+char(13) from sys.views where name like 'tmp%' and len(name)=30 and name not like 'tmp[_]%' 
if len(@sql)>0
exec(@sql)

--清理记录表
truncate table t_bas_temporarytablename
DBCC DBREINDEX(' t_bas_temporarytablename ');

执行删除临时表的后台计划未执行,原因排查:

第一步: 登录管理中心,检查数据中心是否勾选了 "允许执行计划任务"

第二步:查看金蝶云星空服务器,K3CloudJobProcess服务是否启用

第三步:确认删除临时表的执行计划设置是否正确?

开始时间:必须在今天之前

结束时间:必须在今天以后

任务状态:必须是准备状态

第四步:检查Windows系统日志,查看执行计划是否有出错

第五步:检查删除临时表的执行计划最近一次执行情况

如果执行时间已经刷新,且记录了最近一次执行情况,则说明执行计划能正常调用

  1. 查询阻塞和死锁信息

--查看是否存在阻塞语句

select * from master..sysprocesses where blocked<>0
  • 返回记录说明存在阻塞
  • 如果隔几秒再次执行,没有记录返回,那可能属于正常的阻塞

--查询死锁信息语句

SELECT XEventData.XEvent.value('@timestamp', 'datetime2(3)'), 
cast(XEventData.XEvent.value('(data/value)[1]', 'varchar(max)') as xml)
FROM (SELECT CAST (target_data AS XML) AS TargetData
    FROM sys.dm_xe_session_targets st
    JOIN sys.dm_xe_sessions s ON s.address = st.event_session_address
    WHERE [name] = 'system_health' AND st.target_name = N'ring_buffer') AS Data
CROSS APPLY TargetData.nodes ('//RingBufferTarget/event') AS XEventData (XEvent)
    WHERE XEventData.XEvent.value('@name', 'varchar(4000)') = 'xml_deadlock_report';

  1. SQL Server标准报表和性能报表

如果某帐套突然增大很多,可通过报表“按排在前面的表的磁盘使用情况”,查看具体到哪张表突然增大,造成磁盘的突然增大。

 

按平均CPU时间排在前面的查询,按总CPU时间排在前面的查询,按平均IO次数排在前面的查询,按总IO次数排在前面的查询。通过上述四张报表,可获取到比较慢的SQL语句,并初略分析出查询慢等相关的问题。

 

  1. 数据库相关属性

 

推荐:恢复模式设置为简单模式,数据库的自动更新统计信息设置为已启用,数据库自动伸缩设置为禁用,自动关闭属性设置为禁用,数据库兼容级别(SQL SERVER 2008 R2兼容级别为100,SQL SERVER 2012兼容级别为110,SQL SERVER 2014 兼容级别为120)

  1. 数据库端口攻击

1)在命令行下,执行命令netstat -an >c:\netstat.txt

2)检查内容,统计1433端口(SQL服务默认端口)TIME_WAIT的数量,如果数目超过100,这时候整个系统将可能出现登录非常缓慢或者无法登陆的情况。

关键内容,数据库的IP地址,端口1433 状态TIME_WAIT

例如:

TCP    58.250.37.187:1433     61.4.185.166:5019      TIME_WAIT

  TCP    58.250.37.187:1433     61.4.185.166:5020      TIME_WAIT

  TCP    58.250.37.187:1433     61.4.185.166:5222      TIME_WAIT

  TCP    58.250.37.187:1433     61.4.185.166:5358      TIME_WAIT

  TCP    58.250.37.187:1433     61.4.185.166:5566      TIME_WAIT

  TCP    58.250.37.187:1433     61.4.185.166:5584      TIME_WAIT

  TCP    58.250.37.187:1433     61.4.185.166:5699      TIME_WAIT

  TCP    58.250.37.187:1433     61.4.185.166:6007      TIME_WAIT

  TCP    58.250.37.187:1433     61.4.185.166:6097      TIME_WAIT

  TCP    58.250.37.187:1433     61.4.185.166:6155      TIME_WAIT

  TCP    58.250.37.187:1433     61.4.185.166:6255      TIME_WAIT

3)约束:检查需要在数据库服务器上执行;

4)分析结果:数据库服务器基于1433端口的连接状态为TIME_WAIT的连接数为100个(统计出来的数量),请检查网络或者代码中有没打开数据连接没有关闭的情况。如果服务器通过外网可以直接访问,可能服务器被攻击,建议将服务器迁移到内网。

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 金蝶星空SQL报表开发是基于金蝶星空平台的一种数据分析和报表制作功能。该功能为用户提供了丰富的数据分析和展示能力,并为各类业务决策提供数据支撑。通过金蝶星空SQL报表开发,使用者可以方便地设置查询条件、运算符和参数等,生成符合实际需求的报表。 使用金蝶星空SQL报表开发,用户可以快速生成各种报表,包括基础报表、汇总报表、卡片报表等,还可以进行数据透视分析、排名分析等多维数据分析。报表的生成和展示过程简单方便,操作界面友好,用户可以轻松地进行上手学习和操作。 金蝶星空SQL报表开发不仅具备灵活性和针对性,还具有安全性和数据保护性,避免了数据泄露和误操作的风险。同时,平台采用端存储和数据交互方式,用户可以随时随地进行数据访问和处理,方便了多地协同工作。 总之,金蝶星空SQL报表开发具有简单易用、功能强大、安全可靠等优点,是一种非常实用的数据分析和报表制作工具。无论是企业的管理层还是中小企业主,都可以从中获得更多的商业价值。 ### 回答2: 金蝶星空sql报表开发是一种基于计算的数据报表开发工具。它提供了丰富的数据分析功能,可以满足不同行业、不同企业的不同需求。通过金蝶星空sql报表开发,用户可以轻松地进行数据挖掘、数据分析、数据预测等操作,实现数据驱动的决策。 金蝶星空sql报表开发的关键是其强大的数据查询、分析和可视化能力。用户可以在不需要写代码的情况下,根据自己的需求来查询和分析数据。同时,金蝶星空sql报表开发还提供了丰富的图表和报表模板,用户可以根据需求选择最适合自己的报表风格,让数据更加直观、易懂。 金蝶星空sql报表开发还提供了端部署和管理功能,用户无需担心安全问题和数据丢失问题。同时,该工具也支持多人协作和数据共享,方便用户进行团队工作。 总之,金蝶星空sql报表开发是一种强大的数据分析和报表开发工具,适合各类企业、组织和个人使用。它开创了数据分析的新时代,帮助用户更好地发现和利用数据,提高企业决策效率。 ### 回答3: 金蝶星空是一款全新的企业级平台,其中包括了开放式平台、数十年的财务行业经验和领先的OaaS服务。在星空的基础上,可以快速构建各种业务应用、进行个性化定制和开发。 而金蝶星空SQL报表开发,是星空平台上的一项关键服务之一。通过该服务,我们可以在平台上灵活地进行数据统计、分析,从而帮助企业更好地掌握自己的经营情况。 首先,金蝶星空SQL报表开发支持多种方式对数据进行筛选和查询,满足不同业务场景下的需求。同时,通过适当的权限设置,可以保证数据的安全性。 其次,平台提供了多种报表模板供用户选择,用户还可以根据自己的需求和喜好进行自定义设计。除此之外,用户还可以实时对报表进行预览和调试,以便快速调整和完善。 此外,金蝶星空SQL报表开发还支持快速生成图表和图形化报表,通过直观的数据展示方式,帮助用户更好地理解和分析数据,从而更加敏锐地把握市场动态和经营趋势,及时调整经营策略。 综上所述,金蝶星空SQL报表开发是一项功能强大的服务,能够帮助企业快速、准确地获取数据,并通过数据分析生成合适的报表,为决策者提供切实可行的决策依据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值