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

【问题描述】
成本计算到某个节点,卡住半小时甚至更久

【解决方案】
1 数据库优化与重建索引
| 数据库优化与重建索引操作步骤 | 系统管理_数据库优化:索引 | SQL SERVER数据库的常规优化 |
| 性能优化建议 | SQLServer数据库通用优化 |
转:数据库优化:
1,是否存在过多未清理的临时表;
2,查看表存储排名前20的表,查看最大的20个表为哪些;
3,数据库的恢复模式是否是简单,日志文件是否过大,有没有定期备份,截断日志,收缩数据库。
-------------------------------------------------------------------------------------------------------------------
2 检查业务数据有无嵌套
如有,则打最新补丁,先进行出库成本核算,将其他出库单生成凭证,再计算

-------------------------------------------------------------------------------------------------------------------
3 转:SQL Server下SQL语句在代码中执行效率远低于在SSMS下的一个可能原因
若为SQL SERVER 2008版本,且数据库属性设置如下

解决方式:
将数据属性中的【ANSI 警告已启用】设置为true后问题得到解决。
或者通过脚本实现:
USE [master]
GO
ALTER DATABASE 数据库名 SET ANSI_WARNINGS ON WITH NO_WAIT
GO
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
5 提单处理
-------------------------------------------------------------------------------------------------------------------
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)
小议成本计算卡住的解决方法
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



