推荐_关于程序的并发支持_产供销
学习.交流
专业源于专注
www. onlyit. cn   
学习交流 文件下载 手册资料 交流QQ群

    

 5  1/1   1  
作者
内容
angelbaby  [个人空间]


注册  2020-05-30
发贴数  5
精华数  0
原创贴  0
来自  
状态  正常

级别  会员
#1»发布于2020-05-30 15:44

看了下oit仍旧是直接select 
当数据量大的时候,连登陆都困难,比如res。 
 
可否针对sql版本作一些并发优化? 
 
SQL Server有两种行版本控制,使用行版本控制的已提交读隔离(READ_COMMITTED_SNAPSHOT)和直接使用SNAPSHOT事务隔离级别。 
 
READ_COMMITTED_SNAPSHOT数据库选项为ON时,READ_COMMITTED事务通过使用行版本控制提供语句级读取一致性。 
ALLOW_SNAPSHOT_ISOLATION数据库选项为ON时,SNAPSHOT事务通过使用行版本控制提供事务级读取一致性。



        


qf2016  [个人空间]
QQ名  meng 113779009


注册  2016-01-17
发贴数  2567
精华数  0
原创贴  0
来自  
状态  正常

级别  版主
#2»发布于2020-05-30 16:48

 
感谢 angelbaby  提出意见。 
系统对大数据量提取有多种优化支持的,如客户端数据字典增量更新、大数据提取服务端多线程并发等。 
 
如果赶紧具体哪个功能慢可以提出来,我们来进行优化。


        


angelbaby  [个人空间]


注册  2020-05-30
发贴数  5
精华数  0
原创贴  0
来自  
状态  正常

级别  会员
#3»发布于2020-05-30 22:32

试试看,登陆及打开产品资料库的运行效果 
 
declare @i int   
declare @k int  
declare @nick nchar(10)  
set @i = 1  
while @i<20000000 
begin  
set @k = @i % 10  
set @nick = convert(nvarchar,@i)  
set @k = convert(nvarchar,@k) 
insert into res(res_id,res_name,res_cat_id,res_unit_type) values(@nick,@k,'01','A')  
set @i = @i + 1  
end


        于 2020-05-30 22:32 被 angelbaby 修改


angelbaby  [个人空间]


注册  2020-05-30
发贴数  5
精华数  0
原创贴  0
来自  
状态  正常

级别  会员
#4»发布于2020-05-30 21:50

程序登陆后,大量的 exec sp_cursorfetch 180150375,16,640001,5000 
进入产品资料,大量的 exec sp_cursorfetch 180150375,16,640001,5000 
 
是这个语句引起的性能问题? 
----$$$$$$$$$$$$$$$-----------------------------------^^^^^^^^^^^^^------------------------------------ 
 
select 
 res_id,res_cat_id,res_name,parent_res_id,auto_copy_parent_info,batch_flag,res_unit_type,bar_code,quality_days, 
res_spec,ceil_num,floor_num,manufacturer,stop_flag,in_ceil_price,in_ref_price,out_floor_price,out_ref_price,res_kind, 
order_id,cost_price,price_dot_num,easy_code,default_edt_id,res_model,res_rank,res_place,ass_unit_type,num_dot_num, 
res_desc,edt_io_flag,cost_cal_method,edt_ceil_num,edt_floor_num,ext_1,ext_2,ext_3,ext_4,ext_5,ext_6,ext_7,ext_8, 
create_date,create_user_id,last_modi_date,last_modi_user_id,emf_route_id,subject_storage_amount,subject_sell_income, 
subject_sell_cost,sup_id,homepage  
from res  
 
where 1=1 and  1=1   
 
/* 
这个条件会引起全表扫描吧 
*/ 
 
and (stop_flag <>  N'Y' or stop_flag is null or stop_flag= N'')  
 
/* 
这个条件会引起全表扫描吧 
*/ 
 
 and  res_cat_id =  N'01'     
order by order_id,res_cat_id,res_id




angelbaby  [个人空间]


注册  2020-05-30
发贴数  5
精华数  0
原创贴  0
来自  
状态  正常

级别  会员
#5»发布于2020-05-30 21:54

看了程序中的界面显示,其它不管它是否停用,都会显示上来,那为何还要在 select 的时候加上这个全部情况的条件呢, 
 
而下面也是描述stop_flag的所有情况,既然是所有情况,那这个条件完全就是多余的。 
 
and (stop_flag <>  N'Y' or stop_flag is null or stop_flag= N'')  
 
你这个 停用标志条件完成不要写在这个执行里了。。。。





 5  1/1   1  

登录后方可发贴


[ 电话: 0571-85462761 王先生 QQ: 124520435 加入软件QQ群 - 杭州 - 浙ICP备19051128号-1 网安 33010402003225 ]