位置: 编程技术 - 正文

SQL Server使用游标处理Tempdb究极竞争-DBA问题-程序员必知(sqlyog)

编辑:rootadmin

推荐整理分享SQL Server使用游标处理Tempdb究极竞争-DBA问题-程序员必知(sqlyog),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:sql server使用说明,sql server使用sql语句,sql server使用sql语句,sqlserver如何使用,sql server怎么使用sql语句,sql server写小游戏,sql server 使用,Sqlserver使用游标查询所有数据库下的某张表,内容如对您有帮助,希望把文章链接给更多的朋友!

SQL Server tempdb分配竞争算是DBA老生常谈的问题了,几乎现在所有的DBA都知道多建几个文件来解决/缓解问题.但是深层次的的竞争依旧不可避免.这里给大家剖析下游标在tempdb中的特点使其在一定场景下替代临时表/表变量对象,解决深层次的tempdb竞争问题.

在抛出这个不可避免的问题之前我们先简要看下什么是tempdb竞争.

我们拿SQL Server创建一个临时表的过程来描述

1 在系统表中创建表的条目(系统数据页中)

2 分配一个IAM页并找到一个混合区在PFS页中标记

3 分配一个数据页(查看SGAM页,查看PFS页后并更新,更新IAM页)

4 表记录记录到系统表中

从上述过程可以看出创建一个简单临时表需要查找,更新一系列的系统表/系统数据页,且当使用完删除临时表时上述操作逆向进行.索引相应的创建/销毁一旦大量并发,内部竞争也就产生了.虽然tempdb的缓存策略一定程度可以缓解相应创建过程的IAM,数据页分配, Sql Server tempdb原理-缓存机制解析实践,但竞争依旧.

可以看到SGAM,PFS等系统页是表创建过程的必经之路,他的分配竞争也就十分明显了.这也就是为什么采用多个数据文件,让系统页(包含系统表)在分散在多个数据文件中的以减轻分配竞争的压力原因.

到此也许大家都改猜到了终极问题是什么了,就是对系统对象的操作.连SQL Server大牛Paul Randal都为之头疼的问题.

具体哪些对象呢,我们可以简单测试捕捉下如图1-1

使用SQLQUERYSTRESS捕捉

Code

图1-1

可以看到图中tempdb中系统页 2:1:中发生典型的Pagelatch竞争.我们用dbcc page来看下页的情况如图2-2

Code

图2-2

可以看到在系统对象sysallocunits处发生了竞争,当然还有许多其他的系统对象,感兴趣的朋友自行捕捉.

大量的针对系统对象表的操作使得tempdb其吞吐难以得到进一步的提升,这个是由系统本身的运作方式引发的,当然面对如此巨量的tempdb使用,就没有别的方式了吗&#;这时我不能给肯定的答案,但可以给大家一个IT界的流行答案:It depends :)

在介绍游标前,先简单说下面对tempdb竞争中针对系统表竞争的常规处理方式

1 减小针对系统对象的事务大小(如select * into #的使用)

2 减小tempdb的使用频次(看似废话,但实际中的确可能用不到这么多)

3 临时对象中少使用约束造成额外的系统对象负担.

SQL Server使用游标处理Tempdb究极竞争-DBA问题-程序员必知(sqlyog)

好了接下来该说游标了,貌似八竿子打不着的事儿,实际上的确如此,我们只是利用游标的特性在极其特殊的场景下来解决相应问题.

也许你已经猜到了,游标是使用tempdb的,归类到worktables中,使用worktables的对象如游标,dbcc checkdb,merge join,exchange spill等等.worktables是tempdb中一种普遍而又特殊的使用方式,他只在SQL Server内部中应用,给它定义为”temporary rowsets”,他的object id是负的,且无需系统表的记录!

我们来简单验证说明下

code

得到的tempdb Log如图 2-1

图2-1

我们用dbcc page分析此页 可以看到这个是个IAM页如图2-2

code

图2-2

我们进而分析IAM分配的数据页,发现他就是一个简单的数据页,不属于任何系统对象如图2-3

Code

图2-3

OK,至此联想起游标同样适用worktables,我们可能联想到了一些游标适用的场景居然还可以帮助tempdb缓解竞争.至于何种场景?It depends,大家自己去联想吧,但tempdb遇到相应竞争时我是否可以采用&#;朋友们自己抉择吧.

最后看图说话如图2-4

Code

图2-4

以上叙述是否改变了你对游标的看法呢&#;程序员朋友们,当DBA告诉你使用tempdb太多时是否考虑换种方式使用tempdb, DBA朋友们,不要轻易告诉程序员们过度使用tempdb.

结语 任何系统的愉快运转都是基于某种状态的平衡.我们需要在复杂环境中的性能瓶颈,资源消耗,相应时间等等因素中找到平衡点.什么样的平衡点&#; It depends :)

ps:sql server 数据库 ' ' 附近有语法错误

昨天做项目时候,遇到标题的问题,代码跟踪把sql 语句 复制出来在数据库执行不了,然后重新写个一模一样的,然后在 赋值到代码中,还是同样的错误,就是不知道哪里出现了错误,最后 把 sql 语句写成最简单的 select * from tab 还是同样的错误。

然后 ,然后就不会了。

最后在这个语句写同样的语句,最后发现问题了,新写的sql 语句的 select 变 颜色了,而之前的赋值出来的 select 和 字段 表名的颜色一样,证明系统 不承认它是关键字,把这个select 删掉在 这个位置上重新写,还是同样的错误,最后发现原来在 这个select 前面有个全角的 空格,全角空格真的是用肉眼看不出来啊,恍然大悟,才知道 ' ' 附近有语法错误 ,意思是 空格 有语法错误,证明不是 sql server 支持的 空格格式。

这个问题百度了,也没解决,希望 可以帮到其他人,又不是特别难的东西,但是找到问题还是很浪费时间。

SQLServer中merge函数用法详解 Merge关键字是一个神奇的DML关键字。它在SQLServer被引入,它能将Insert,Update,Delete简单的并为一句。MSDN对于Merge的解释非常的短小精悍:根据与源表联接

SQLServer中Partition By及row_number 函数使用详解 partitionby关键字是分析性函数的一部分,它和聚合函数不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录,par

深入学习SQL Server聚合函数算法优化技巧 Sqlserver聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这

标签: sqlyog

本文链接地址:https://www.jiuchutong.com/biancheng/312844.html 转载请保留说明!

上一篇:SqlServer如何通过SQL语句获取处理器(CPU)、内存(Memory)、磁盘(Disk)以及操作系统相关信息

下一篇:SQLServer中merge函数用法详解(sql merge语句)

  • 5月份企业所得税
  • 开发商交的税费是什么
  • 采用现金支付
  • 补缴以前年度附加税
  • 发票第二年是否可以作废
  • 委托加工环节原材料收消费税吗
  • 金银首饰在哪个平台买比较好
  • 老板垫付的费用怎么做凭证
  • 建筑工程居间服务协议
  • 劳务发票未收到做账
  • 企业接受捐赠是营业收入吗
  • 个人合伙企业有没有企业所得税
  • 贷款利息增值税发票
  • 报税没有申报现金流量表
  • 学校的纳税人识别号是不是社会信用代码
  • 房屋修缮费交增值税吗
  • 报关单毛重错了被海关查到
  • 其他应收款无法收回的会计分录
  • 酒店自开农副产品收购发票需要缴税吗
  • 支付境外销售佣金如何入账科目
  • 小规模纳税人季度超过30万怎么纳税
  • 租赁架子公司购车合法吗
  • 对赌协议的账务处理流程
  • 个人出租住房需要交城镇土地使用税吗
  • 基本建设项目待摊投资管理规定
  • 冲减增值税进项税怎么处理
  • 暂估材料太多怎么办
  • 福利费不需要发票
  • 公司代缴社保公司吃亏吗
  • 试乘试驾车入账分录
  • 什么样的企业是好企业,什么样的员工是好员工
  • PHP:mcrypt_module_is_block_algorithm_mode()的用法_Mcrypt函数
  • 稳岗补贴需要缴纳什么税
  • 解决科学文化领域的矛盾应坚持的方针是
  • 工业企业采购供应管理
  • 陈列费用明细表怎么做
  • 滴滴打车开具的电子发票可以抵扣吗
  • pytorch自动编码器
  • 基于微信小程序制作
  • 鲁棒性分析方法
  • 广告模板网站
  • 经营租赁出租方的会计处理
  • 国外购买土地
  • 事业单位政府拨款的会计分录
  • mongodb数据删除
  • 长期借款期末需结转吗
  • 政府给的补偿款怎么做账
  • 个人写收据要写身份证号吗
  • 国际货运代理企业不得从事的业务是
  • 工程外经证预缴税款计税方法
  • 季度报税都是几月份
  • 普通发票可以扣除吗
  • 为外单位人员报备流程
  • 承兑汇票利息分录
  • 企业债务重组业务
  • 公司收到社保打款怎么办
  • 高新技术企业外债便利化额度试点重庆
  • 固定资产对外投资通过固定资产清理吗
  • 中小微企业有哪些企业
  • 低值易耗品摊销借贷方向
  • 外购设备的会计分录
  • 营改增后物业公司账务处理
  • 收到劳务费发票如何申报个税
  • mysql 的replace into实例详解
  • 服务器文件夹共享分组
  • win打开本地策略
  • 怎么修改ubuntu的ip地址
  • linux检查更新
  • 预装win7旗舰版
  • linux系统ll
  • linux shell打开文件
  • innertext赋值
  • android 加载更多
  • javascript编写
  • 【Rayeager PX2分享】OpenCV入门之线段检测
  • 湖北税务发票查询系统网
  • 最新专票税率几个档
  • 个体户 零申报
  • 建设工程造价咨询合同需要交印花税吗
  • 发票明细怎么导入开票系统里
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设