电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

小议成本计算卡住的解决方法

来源:金蝶云社区作者:金蝶2024-09-236

小议成本计算卡住的解决方法

【问题描述】

成本计算到某个节点,卡住半小时甚至更久



【解决方案】

1  数据库优化与重建索引

数据库优化与重建索引操作步骤
系统管理_数据库优化:索引
SQL SERVER数据库的常规优化



性能优化点

性能优化建议
SQLServer数据库通用优化

转:数据库优化:

1,是否存在过多未清理的临时表;

2,查看表存储排名前20的表,查看最大的20个表为哪些;

3,数据库的恢复模式是否是简单,日志文件是否过大,有没有定期备份,截断日志,收缩数据库。


-------------------------------------------------------------------------------------------------------------------

2  检查业务数据有无嵌套

如有,则打最新补丁,先进行出库成本核算,将其他出库单生成凭证,再计算

QQ截图20221008093625.webp

-------------------------------------------------------------------------------------------------------------------

3  转:SQL Server下SQL语句在代码中执行效率远低于在SSMS下的一个可能原因  

若为SQL SERVER 2008版本,且数据库属性设置如下

   image.webp

解决方式:

    将数据属性中的【ANSI 警告已启用】设置为true后问题得到解决。

    或者通过脚本实现:   

    USE [master]

    GO

    ALTER DATABASE 数据库名 SET ANSI_WARNINGS ON WITH NO_WAIT

    GO

-------------------------------------------------------------------------------------------------------------------

4  数据库优化脚本以及定时自动优化


-------------------------------------------------------------------------------------------------------------------

提单处理


-------------------------------------------------------------------------------------------------------------------

6 转:SqlServer数据库优化

6.1  启动【sql server Management Studio】,在【对象资源管理器】窗口里选择【SQL Server 代理】-【作业】-【新增作业】。如果SQL Server 代理没有启用请先启用。

 

    

6.2  选择到【步骤】,新建作业步骤,写上步骤名称,选择类型为T_SQL,选择对应需要优化的数据库,在命令框中输入执行存储过程exec RebuildIndex_UpdateSTATISTICS


6.3  选择【高级】,成功时要执行的操作改为【退出报告成功的作业】

6.4  创建存储过程 ,复制以下脚本到SQL Server里面执行,USE [CB1608]中的“CB1608”改为需要优化的数据库

 USE [CB1608]

GO

/****** Object:  StoredProcedure [dbo].[RebuildIndex_UpdateSTATISTICS]    Script Date: *****/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

create PROCEDURE [dbo].[RebuildIndex_UpdateSTATISTICS]

as begin

declare @SqlStr nvarchar(max)

set @SqlStr=''

select  @SqlStr= @SqlStr+ + 'alter index all on  '+name+ ' rebuild;'  from sysobjects where xtype='U' and (name like 'T_%') and (name not like 'TMP%') 

exec (@SqlStr)

declare @SqlStr1 nvarchar(max)

set @SqlStr1=''

select  @SqlStr1= @SqlStr1+ + 'UPDATE STATISTICS '+name+ ';'  from sysobjects where xtype='U' and (name like 'T_%') and (name not like 'TMP%') 

exec (@SqlStr1)

 

declare @SqlStr2 nvarchar(max)

set @SqlStr2=''

select  @SqlStr2= @SqlStr2+ + 'ALTER TABLE '+name+ ' rebuild WITH (DATA_COMPRESSION =ROW);'  from sysobjects where xtype='U' and (name like 'T_%') and (name not like 'TMP%') 

exec (@SqlStr2)

end 

 

 

6.5  设置计划,自动定时执行的时间,切换到【计划】选项,新增作业计划,选择重复执行,可以根据实际情况来设置执行频率和执行时点。

 

6.6  点击确认按钮完成作业计划创建操作。如果想先立即执行一次,可以右键该作业->作业开始步骤。执行时要选择空闲时间,因为优化过程中会导致性能慢,也有可能造成阻塞。执行时间根据数据库大小

 

附录:或者使用下面脚本直接创建也可以

--USE [蓝海实业集团1230] --需要优化的数据库名称,需要修改为对应的数据库,或者直接打开对应数据库执行

--GO

/****** Object:  StoredProcedure [dbo].[RebuildIndex_UpdateSTATISTICS]    Script Date: *****/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

if exists(select 1 from sys.all_objects where name ='RebuildIndex_UpdateSTATISTICS')

begin 

  drop PROCEDURE RebuildIndex_UpdateSTATISTICS

end

GO

 

create PROCEDURE [dbo].[RebuildIndex_UpdateSTATISTICS]

as begin

declare @SqlStr nvarchar(max)

set @SqlStr=''

select  @SqlStr= @SqlStr+ + 'alter index all on  '+name+ ' rebuild;'  from sysobjects where xtype='U' and (name like 'T_%') and (name not like 'TMP%') 

exec (@SqlStr)

declare @SqlStr1 nvarchar(max)

set @SqlStr1=''

select  @SqlStr1= @SqlStr1+ + 'UPDATE STATISTICS '+name+ ';'  from sysobjects where xtype='U' and (name like 'T_%') and (name not like 'TMP%') 

exec (@SqlStr1)

 

declare @SqlStr2 nvarchar(max)

set @SqlStr2=''

select  @SqlStr2= @SqlStr2+ + 'ALTER TABLE '+name+ ' rebuild WITH (DATA_COMPRESSION =ROW);'  from sysobjects where xtype='U' and (name like 'T_%') and (name not like 'TMP%') 

exec (@SqlStr2)

end 

GO

 

 

/****** Object:  Job [优化数据库(重建索引更新统计信息收缩表)]    Script Date: 2020/7/30 15:22:57 ******/

BEGIN TRANSACTION

DECLARE @ReturnCode INT

SELECT @ReturnCode = 0

/****** Object:  JobCategory [[Uncategorized (Local)]]    Script Date: 2020/7/30 15:22:57 ******/

IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)

BEGIN

EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'

IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

 

END

 

declare @dtbs varchar(255);

Select @dtbs= Name From Master..SysDataBases Where DbId=(Select Dbid From Master..SysProcesses Where Spid = @@spid);

declare @jobName varchar(255);

set @jobName = '优化数据库(重建索引更新统计信息收缩表)_' + @dtbs;

 

if EXISTS (SELECT 1 FROM msdb.dbo.sysjobs WHERE name = @jobName )

BEGIN

EXEC

msdb.dbo.sp_delete_job @job_name = @jobName

END

 

DECLARE @jobId BINARY(16)

EXEC @ReturnCode =  msdb.dbo.sp_add_job @job_name=@jobName, 

@enabled=1, 

@notify_level_eventlog=0, 

@notify_level_email=0, 

@notify_level_netsend=0, 

@notify_level_page=0, 

@delete_level=0, 

@description=N'No description available.', 

@category_name=N'[Uncategorized (Local)]', 

@owner_login_name=N'sa', @job_id = @jobId OUTPUT

IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

/****** Object:  Step [重建索引更新统计信息收缩表]    Script Date: 2020/7/30 15:22:57 ******/

 

EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'重建索引更新统计信息收缩表', 

@step_id=1, 

@cmdexec_success_code=0, 

@on_success_action=1, 

@on_success_step_id=0, 

@on_fail_action=2, 

@on_fail_step_id=0, 

@retry_attempts=0, 

@retry_interval=0, 

@os_run_priority=0, @subsystem=N'TSQL', 

@command=N'exec RebuildIndex_UpdateSTATISTICS', 

@database_name= @dtbs, 

@flags=0

IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1

IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'优化数据库', 

@enabled=1, 

@freq_type=4, -- 8:每周;4每日

@freq_interval=1,  --执行间隔

@freq_subday_type=1, 

@freq_subday_interval=0, 

@freq_relative_interval=0, 

@freq_recurrence_factor=0, 

@active_start_date=20000101, 

@active_end_date=99991231, 

@active_start_time=20000, 

@active_end_time=235959, 

@schedule_uid=N'ad85d50c-2b86-4b98-9e2f-2bd9c07d6d1c'

IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'

IF (@@ERROR <> 0 OR @ReturnCode <> 0)

小议成本计算卡住的解决方法

【问题描述】成本计算到某个节点,卡住半小时甚至更久【解决方案】1 数据库优化与重建索引数据库优化与重建索引操作步骤系统管理_数据库优...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信