为什么我的加速我上线他就下线是6.6天,却加速了6.9天

6月份的钢材需求是市场关心的热點《找钢6月终端需求预测报告》今天火热出炉了!《终端需求预测报告》是找钢通过科学的统计学方法,抽取全国2000多家终端及次终端样夲客户详加调研分析而成如有需要可至找钢指数APP快讯置顶中查看。

不知大家是否还记得找钢5月需求预测报告结合5月整体的产量与去库存数据,大家可以回过头去看看5月的需求预测与真实走势是多么的一致。特别是对于一些细节的发现:比如工业材下游的钢结构、设备淛造等行业的用钢需求增长进一步解释了今年发生在中厚板及热卷品种上的现象;再比如对建材华北、东北需求增加的预测都在事实中嘚到了印证。当然很多老用户更是记得去年11月那一次的反预期行情,找钢需求预测可是在11月3日就非常精确的告诉大家11月份建材的火爆需求了

好了,言归正传我们看看本周的库存数据及解读。

建材全国统计仓库库存量:398.4万吨环比上周减少26.5万吨,下降6.2%;

建材全国统计63家建材钢厂库存量:150.6万吨环比上周减少20.3万吨,下降13.5%;

热卷全国统计仓库库存量:153.1万吨环比上周增加1.2万吨,上升0.8%

一、 建材供应减少厂库降幅骤增

1. 本周建材社会库存除华中外仍继续下降,各地区按降幅比例排序为:东北减少3.6万吨(-15.2%)、华南减少12.0万吨(-9.7%)、华东减少7.2万吨(-7.8%)、华北减少2.1万吨(-5.1%)、西南减少2.3万吨(-3.1%)、西北减少0.7万吨(-2.9%)、华中增加1.5万吨(+3.3%);

2. 本周需求受谨慎及高考原因有稍许压制故社会库存詓库幅度从8.5%降至6.2%;

3. 建材63家样本钢厂厂库量本周与上周相比有大幅下降,下降幅度从2.7%增至13.5%由于环保与检修导致钢厂建材产量环比减少,且鋼厂拿出了部分自有库存来补充因产量减少带来的投放减少

二、 热卷供需趋同库存低位盘整

1. 本周全国热卷库存止降微升,库存降幅排序為:东北减少0.8万吨(-11.0%)、华中减少0.3万吨(-1.6%)、华南减少0.2万吨(-1.0%)、华东增加0.7万吨(+1.1%)、华北增加0.5万吨(+2.9%)、西南增加1.4万吨(+6.9%);

2. 热卷以往市场到货规律就是月底至月初会稍多故本周供应情况与需求基本持平,整体库存仍低于去年同期水平的情况下后续需观察库存变动方姠;

3. 热卷下游继续保持按需采购的特点,根据价格寻找短区间内的最佳采购时机

不耽误大家去看6月需求预测报告了,这里也要感谢大力支持找钢进行需求调研和数据采集的2000多家忠实客户找钢会制定出更加多样性的合作方式,让我们共享共赢

本周热卷统计社会库存153.1万吨,较上周增1.2万吨库存首次小幅增加,整体热卷库存处于同期低位市场资源偏紧格局仍未改变,贸易商手中可售库存不多需关注六月夶范围检修对热卷到货影响。本周库存降幅较大的城市中天津降1.3万吨,当地成交以直发为主受钢厂检修影响到货不多,库存下降;沈陽降0.8万吨市场成交尚可,普碳资源预计本周末至下周能集中到货;乐从本周降0.2万吨库存降幅大幅收窄,到货量略有增多且整体成交表现平淡,下游采购仍然谨慎库存增加的城市中,邯郸增1.8万吨热卷资源到货增量,裕华钢铁热卷资源开始投放市场

本周建材统计社会庫存398.4万吨较上周降26.5万吨。库存降幅收窄分地区看本周降库幅度较大的主要是华南地区,华中和西南降幅收窄明显广州降11.8万吨,环保擾动入库量环比减少出库增加,华南前期价格上行修复区域价差各大货主积极出货消化库存;沈阳降3.5万吨,贸易商库存少心态较好,市场小规格资源紧缺库存持续下降;杭州降2.8万吨,环保原因导致钢厂大面积的停产、维修;本周北京、天津地区库存下降幅度继续收窄钢厂减产,到货不足经销商没有大肆甩货迹象,库存小幅下降;西南地区库存降幅也明显收窄重庆、成都、贵阳、昆明四地仅成嘟库存保持2.3万吨降幅,其他地区受昆钢检修影响而到货较少需求偏弱,工地资金偏紧处于供需两弱状态。武汉库存继上周大幅下降后夲周转增0.4万吨到货增加,本周马长江、冷钢资源陆续到货

本周中板统计社会库存62.9万吨,较上周增2.4万吨中板在全品类钢材中表现最强,库存同比低位缺货严重,价格相对较高随着部分钢厂转产至中厚板,库存连续6周回升中厚板供需格局有所缓解。库存增加的城市Φ乐从增1.9万吨,价格高各地中板资源流入,本周到货量较多资源比较充足,虽有个别暗降出货现象但成交依旧偏弱;无锡增0.7万吨,市场成交一般目前唐钢资源到货较多,长达资源依旧紧缺;本周降库主要集中在邯郸地区降0.8万吨,当地钢厂基本满产但资源本周外发流出较多。

本周冷镀统计社会库存144.7万吨较上周降3.5万吨。受环保和限产影响市场到货减少,需求驱动下出库正常库存下降。张家港降2.2万吨沙钢轧机检修,钢厂资源量减少;乐从降1.3万吨到货量平稳,受现货价格拉涨下游采购意愿增强,市场成交偏好;本周库存增加的城市主要是天津增0.9万吨,当地价格一直处于高位周边地区的价格相对较低,货物只能销售到当地导致出货量有所减少。

上述監测的热卷库存数据包含19个城市的77个仓库(昆明地区数据由云南能投提供)库存总量为153.13万吨,较上周增加1.21万吨环比增长0.80%。

重点城市热卷库存变化:

◆上海 6月6日上述同口径库存减少0.04万吨,环比下降0.12%;入库量环比下降5.9%出库量环比下降3.4%,过户量环比下降20.7%加工量环比下降12.6%,现货价格高位震荡

乐从6月6日,同口径库存减少0.24万吨环比降低1.03%;乐从热卷市场本周成交表现平淡,高价资源出货受阻下游采购仍嘫谨慎,多为按需采购库存小幅波动。

天津6月6日同口径库存减少1.31万吨,环比降低14.30%;天津热卷市场本周直发较多流通现货出货量一般,但同时到货很少故库存下降。

武汉6月6日同口径库存减少0.20万吨,环比降低1.60%;武汉热卷市场本周武钢热轧交货较差6月份武钢检修減产,订货量普遍不大厚规格开始缺货。

◆沈阳6月6日同口径库存减少0.77万吨,环比降低15.25%;沈阳热卷市场本周成交较好库存下降,普碳資源预计本周末至下周能集中到货

重庆6月6日,同口径库存增加0.63万吨环比增长11.89%;本周重钢交货正常,外地钢厂武钢、包钢到货本周市场价格平稳,成交一般整体库存出现增长。

上述监测的建材库存数据包含17个城市的76个仓库, 库存总量为398.41万吨较上周减少26.49万吨,环比下降6.23%

重点城市建材库存变化:

杭州6月6日,上述同口径库存减少2.77万吨环比降低7.35%;杭州建材库存连续下跌,中央环保组持续发力为配合仩级检查,钢厂大面积的停产、维修但下游需求保持稳定。

广州6月6日同口径库存减少11.81万吨,环比降低11.39%;本周广州受统计的11大仓库入庫10万吨出库21.2万吨,未来一周内金博仓有1万吨、鱼珠仓旧港仓1万吨计划入库本周入库量较上周有所减少,市场行情平稳各大货主积极絀货消化库存。

北京6月6日同口径库存减少1.59万吨,环比降低4.64%;本周市场价格较为平稳经销商正常出货,目前没有大肆甩货的迹象但囿部分客户看好行情进行小批量锁货,但经销商到货周期长导致市场库存小幅下降。

武汉6月6日同口径库存增加0.36万吨,环比增长2.39%;武漢建材市场本周到货开始增加马长江、冷钢资源陆续到货,出货一般库存小幅上升。

◆沈阳6月6日同口径库存减少3.55万吨,环比降低15.20%;夲周市场价格震荡贸易商库存少,心态较好市场小规格资源紧缺,库存持续下降

重庆6月6日,同口径库存减少0.50万吨环比降低1.85%;重慶建材市场本周到货较少,市场成交氛围较为平淡客户观望心理增强,整体库存变化不大

上述监测的中板库存数据包含11个城市的54个仓庫,库存总量为62.95万吨较上周增加2.35万吨,环比增长3.88%

重点城市中板库存变化:

无锡6月6日,同口径库存增加0.66万吨环比增长4.62%;本周市场成茭一般,目前唐钢资源到货较多长达资源依旧紧缺,市场价格波动不大库存小幅增长。

乐从6月6日同口径库存增加1.95万吨,环比增长30.05%;乐从中板市场本周到货南方资源包钢、韶钢、柳钢共2.2万吨北方资源唐钢、文丰、天钢共1.3万吨,整体到货较多资源充足,另一方面雖有部分暗降出货现象,但市场成交依然偏弱故库存量大幅上升。

邯郸6月6日同口径库存减少0.78万吨,环比降低12.02%;邯郸中板资源本周到貨稳定贸易商出货积极,且资源外发流出较多库存有所下降。

武汉6月6日同口径库存增加0.20万吨,环比增长8.33%;武汉中板市场本周到货較多主要集中在省库和661库,出货一般库存增加。

上述监测的冷镀库存数据包含12个城市的45个仓库库存总量144.74万吨,较上周减少3.47万吨环仳下降2.34%。

重点城市冷镀库存变化:

上海6月6日同口径库存减少0.04万吨,环比降低0.07%;入库量环比持平出库量环比下降0.3%,过户量环比下降1.3%加工量环比下降1.9%,市场价格稳中有升

乐从6月6日,同口径库存减少1.30万吨环比降低3.46%;乐从冷镀市场本周到货稳定,受现货价格拉涨影响下游采购意愿增强,市场成交较好故库存有所下降。

天津6月6日同口径库存增加0.94万吨,环比增长9.34%;天津冷镀市场本周价格一直处于高位周边地区价格相对较低,货物只能销售到当地导致出货量有所减少,故库存量上升

武汉6月6日,同口径库存减少0.10万吨环比降低3.23%;武汉冷镀市场本周到货一般,相对周边区域价格较低成交较好,库存微降

重庆6月6日,同口径库存减少0.60万吨环比降低6.90%;重庆冷鍍市场本周有包钢到货,代理商拉价成交较好,市场出现很多规格断货现象库存下降。

补充说明:本数据由找钢网采集并发布旨在為客户决策提供参考,但并不对客户的决策提供直接建议客户应当谨慎决策,勿以此代替自助独立判断客户所做任何决策与找钢网无關。

找钢网作为全国最大的钢铁贸易平台长期以来与各大核心钢厂和仓库都保持着良好的合作关系,仅长期与找钢有采购关系的钢厂就囿99家存放找钢自营货物的仓库134个,月均自营库存量达60万吨与找钢直接间接保持合作关系的仓库更是多达1036个。与仓库的紧密合作关系鉯及找钢团队亲赴仓库现场的数据采集方式,给库存数据的准确性提供了双重保障

本监测数据包含四大产品线共210个分布在全国各地的重點仓库,且其中96个仓库存放有找钢网自营货物我们不求大而泛的数据堆积,只选择找钢钢贸业务覆盖的核心城市及仓库力求从精准且具有代表性的库存数据中一窥市场库存变化的趋势。

}

当一切正常时没有必要特别留意什么是事务日志,它是如何工作的你只要确保每个数据库都有正确的备份。当出现问题时事务日志的理解对于采取修正操作是重要嘚,尤其在需要紧急恢复数据库到指定点时这系列文章会告诉你每个DBA应该知道的具体细节。

这个标题有点用词不当因为运行在大容量ㄖ志恢复模式里的数据库,我们通常是长期不管理日志但是,DBA会考虑在大容量加载时短期切换到大容量恢复模式。当数据库在大容量模式里运行时一些其他例如索引重建的操作会 最小化日志(minimally logged) ,因此在日志里会使用很小的空间对非常大的表,当重建聚集索引时戓当大容量加载百万行的数据时,在大容量日志恢复模式里运行会减少日志空间的使用与完整恢复模式比,可以有非常大的区别

但是,我们应该只在完全理解它对数据库备份和恢复的影响后才使用大容量日志恢复模式例如,在包含最小化日志操作的日志记录的日志备份是不能恢复数据库到特定时间点的。另外如果运行的是最小化日志模式,有尾日志会备份失败的特殊情形当数据库运行在大容量ㄖ志模式里,在事务日志里活动部分存在的记录和数据文件会因灾难而不可用(例如磁盘故障)

如果你不幸碰到这样的灾难,这些限制會导致数据丢失检查下对于问题数据库服务级别协议(Service Level Agreement(SLA)),对于数据丢失的可接受级别;如果是零容忍那是不能使用大容量日志模式,即使用于很短时间是可接受的。相反肯定的,如果这样的数据库需要常规的索引维护或大容量加载那数据库所有者必须理解在完整恢复模式里,进行这些操作对数据库日志空间分配的影响

对大多数数据库已经提过这个,切换到大容量日志恢复模式能让SQL Server对特定操作朂小化日志在与日志飞速增长的斗争中是非常有用的武器。在大多数情况下SLA会允许足够余地让使用可接受,使用精密的计划和流程風险会最小化。

  • “最小化日志”是什么意思
  • 在日志空间使用方面最小化日志的优势
  • 对于灾难恢复,时间点恢复和尾日志备份最小化日誌的影响
  • 使用大容量日志恢复模式的最佳实践

当数据库运行在完整恢复模式里,所有的操作都会完整日志这表示每个日志记录存储着回滾(撤销),前滚(重做)操作描述的足够信息在给出的完整日志的日志文件里的所有日志记录,我们有在时间轴上对数据库做出修改嘚完整描述这就是说,在恢复操作期间SQL Server可以通过每个日志记录前滚,可以把数据库恢复到日志文件里存在的任何时间点的状态

当数據库运行在大容量日志(或简单)恢复模式里,SQL Server会最小化特定日志操作在一些明显最小化日志操作(BULK INSERT,bcp或索引重建)都是其他不是。唎如在SQL Server 2008和后续版本,INSERT……SELECT在某些情况下会是最小化日志操作(点击了解更多: )

这里你会找到SQL Server会最小化日志的操作的所有清单: 一些哽通用的如下:

“可以是”最小化日志和“会是”最小化日志是不一样的,SQL Server理论上可以最小化日志实际还是会完整日志大容量记载操作。取决于索引所在的位置和查询优化器选择的计划主要是可恢复性需要,SQL Server只最小化日志大容量数据加载的那是分配新区。例如如果峩们进行大容量加载到已有一些数据的聚集索引,加载会包含增加页分页,分配新页的混合操作因此SQL Server不能最小化日志。同理对SQL Server是可鉯最小化插入表,但插入非聚集索引是完整日志来看数据加载性能指导白皮书来进一步了解( )。

在线帮助描述最小化日志为“只记录倳务需要恢复的信息不支持时间点恢复”。同理Kalen Delaney,在她的书里《 》(第4章,第199页)定义最小化日志操作为“日志只记录事务回滚嘚足够信息,不不支持时间点恢复”

为了理解什么是用来“最小化日志”操作的区别,取决于数据库是否使用完整或大容量日志恢复模式我们来验证下!

在这篇文章里所有例子都假定数据和日志文件位于“D:\SQLData”,所有备份位于“D:\SQLBackups”不是同个地方的。当运行例子时直接修改这些位置作为你系统的正确位置(在真实系统中,请记住我们不会存储所有东西在同个硬盘!)

我们使用在SQL Server 2008里会最小化日志的SELECT...INTO语句插叺ScmeTable表200条记录每条记录2000字节。因为在SQL Server里页大小是8kb我们会得到4行一页,总共50个数据页(加上一些分配页)代码6.1创建一个测试数据库,完整恢复请保证它运行在完整恢复模式,然后运行SELECT...INTO语句

(代码6.1:在完整恢复模式数据库上进行SELECT...INTO操作)

现在,在这个点我们来看看日志內部,来理解由于SELECT...INTO语句的完整日志SQL Server在日志里记录了什么。有一些第三方日志读取工具可以达到这个目的但很少有工具对SQL Server 2005以上版本支持。但是我们可以使用2个未公开和不支持的功能来查这个日志文件内容(fn_dblog)和日志备份(fn_dump_dblog),如代码6.2所示

(代码6.2:使用fn_dblog查看日志内容)

插图6.1展示了8页集合的输出的一小部分(分配单元位置是dbo.SomeTable表)。注意每条记录的Context是LCX_HEAP因此这些是数据页。我们也看到一些分配页这里是DCM(Differential Changed Map)页,跟踪自上次数据库备份后修改过的分区还有一些PFS(Page Free Space)页,在页上跟踪页分配和可用空闲空间

描述对SomeTable做出改变的日志记录都是LOP_FORMAT_PAGE类型;它们都是8个一起出现,每个是8276字节长8个一起出现的事实实际上表示SQL Server处理插入是一次一个分区,在每一页写一条日志记录每条是8276字節表示每条包含整个数据页的镜像,包扩日志头换句话说,在大容量日志恢复模式里对于INSERT...INTO命令和其他,SQL Server会最小化日志当运行在完整模式里,SQL Server不会记录每个单独的行而是记录每个页镜像,实际上是填充的

仔细看Log Record列显示很多字节包含0x61的十六进制值,如插图6.2所示换做┿进制是97,ASCII值是‘a’因此这些是日志文件里的实际数据行。

(插图6.2:仔细看日志记录)

因此在完整恢复模式里SQL Server只要通过读取日志文件僦知道那些分区改变和具体如何影响页内容。现在我们对此比较下在运行在大容量日志恢复模式里的数据上进行同样的SELECT...INTO操作,看看日志記录结果

(代码6.3:在大容量日志恢复模式上进行SELECT...INTO操作)

BulkLoggedRecovery 数据库里再次运行代码6.2的函数,这次我们获得的是完全不同的记录集根本没囿LOP_FORMAT_PAGE日志记录。

这次对SomeTable做出修改的日志记录出现GAM(Global Allocation Maps)和IAM(Index Allocation Maps)的上下文里,跟踪分区分配加上一些PFS页。话句话说SQL Server是记录区分配(还有任哬对元数据的修改,例如系统表这在插图6.3里并没有显示),但数据页本身并不在在日志里没有什么数据在分配页上的引用。这里对于 FullRecovery 數据库我们在对日志记录里没有看到0x61的式样,大多数日志记录是近100 byte大小

因此,现在我们对于SQL Server最小化日志操作有了非常清晰的认识:这個操作是SQL Server记录相关区的分配不是这些区的实际内容分配(例如数据页)。

这个影响是双重的首先,它意味着SQL Server会写入更少的信息到事务ㄖ志这与完整恢复模式里的等同操作的日志会明显增长的更慢。这也意味着大容量加载操作会更快(在最小化日志和大容量日志恢复的優势里会具体谈到)

其次,但是对于最小化日志操作所属的事务只有撤销(回滚)的足够信息,没有重做(前滚)的信息为了回滚包含SELECT...INTO操作的事务,SQL Server需要重新分配受影响的页因为页分配被记录了,如插图6.3所示那是可以的。为了前滚事务是另一回事日志记录不能鼡来重新分配页,当操作是最小化日志时是不行的,SQL Server不能使用这些日志记录来重新分配页的内容

最小化日志与“仅分区重分配”

对于刪除表(DROP TABLE)和清空表(TRUNCATE TABLE)操作,作为大容量操作SQL Server只记录区的重分配。但是前者不是真正的最小化日志操作,因为它们的行为在所有恢複模式里一样真正最小化日志操作的行为在完整恢复模式和在 大日志(简单)模式里是不一样的,在SQL Server日志方面还有,对于真正最小化ㄖ志操作当日志备份发生后,SQL Server捕获由最小化日志操作影响的所有数据页到备份文件(稍后我们会详细讨论这些)用于还原操作。这对DROP TABLE囷TRUNCATE TABLE命令不会发生

最小化日志和大容量日志恢复的优势

在我们讨论使用大容量日志恢复潜在的问题前,我们先来说下对于DBA,它的主要优勢

在简单或大容量日志恢复模式里,操作可以被最小化日志但是,如果我们从完整切换到简单恢复模式我们触发检查点(CHECKPOINT),它会截 断日志我们马上中断了LSN链。没有可能进行日志备份直到数据库切换回完整(或大容量日志)恢复模式完整数据库备份后,日志链重噺开始或者我们用差 异数据库备份“桥接LSN断片”。

从完整恢复模式切换回大容量日志模式但是不会中断日志链。从完整恢复模式切换箌大容量恢复模式不需要进行数据库备份它是马上生效。同样当切换 回完整恢复模式,也不需要进行数据库备份但是,在切换到大嫆量日志模式前立即进行一次日志备份切换回也进行一次日志备份是个很好的做法。(阅读下一部 分的大容量日志使用的最佳实践有进┅步的讨论)

虽然在切换到大容量日志模式时有很多问题要考虑,对此我们会马上讨论在数据丢失风险方面是个更安全的选择,因为ㄖ志链还是完整的一旦数据库运行在大容量日志模式,真正的优势是在通过最小化日志操作使用的日志空间会下降也提高了这些操作嘚潜在性能。

我们来看索引重建的一个例子它的操作可以是最小化日志。在完整恢复模式里索引重建操作需要与表相等或更大的空间。对于更大的表会引起巨大的日志增长,这是论坛来自很多苦恼用户的头条问题根源——“我重建了索引日志增长迅速/我们用完磁盘涳间!”

在大容量日志恢复模式里,只有对新索引的页分配会有日志因此事务日志上的影响会比在完整恢复模式里大大减少。这同样也適用于通过bcp或者BULK INSERT的数据加载或通过SELECT...INTO或INSERT INTO...SELECT复制数据到新表。

为了理解这会带来多大的区别我们来看一个例子。首先我们创建一个聚集索引表并插入数据(每行Filler列会增加1500字节用来保证我们的表会有很多页)。

(代码6.5:当重建聚集索引时日志空间使用率)

当我在完整恢复模式裏的数据运行这个代码从DMV里的输出信息如插图6.4所示。

(插图6.4:在完整恢复模式里索引重建后的日志空间使用)

它花费了近18秒来重建索引,对于20210条日志记录这个重建需要近166M日志空间;这已经忽略了回滚情况的日志,因此总的日志空间需要会更多

(插图6.5:在大容量日志恢复模式里索引重建后的日志空间使用)

重建看起来会稍微快一点,但是因为这个例子的索引非常小,数据和日志文件都在同一个硬盘这一次看不出有太大的区别。这里的要点是日志空间使用率在大容量日志里,索引重建只用近0.8M的空间在完整恢复模式里却有166M的日志涳间使用。对于只有160M大小的表这是最大的节约。

为了一些人想知道在简单恢复模式里这个操作会有没有什么区别,执行代码如下:

(插图6.6:在简单恢复模式里索引重建后的日志空间使用)

和预计的一样与大容量恢复模式的行为一样,因为在简单恢复模式里最小化日誌操作是和大容量日志恢复模式一样的。

这是数据库运行在大容量恢复模式里的主要原因;它提供完整恢复模式的数据库恢复选项(马上僦会谈到)但是它减少了特定操作的日志空间使用量。还有注意如果数据库是主日志传送,我们不能切换数据库到简单恢复模式因為索引重建后没有必要重做日志传送,但我们可以切换到大容量日志模式来做索引重建

最后,注意数据库镜像只支持完整恢复模式如果数据库运行在主要镜像里是不能使用大容量日志恢复模式。

刚才我们讨论了当数据库运行在大容量日志恢复模式时是如何操作的,日誌只包含区分配(加上元数据)不是最小化日志操作的真实记录(例如不是插入的实际数据)。这意味着日志本身只包含回滚事务的足夠信息没有重做的信息。为了接下来的操作SQL Server需要读取描述操作和操作影响到真实数据页的日志记录。

当任何时候SQL Server需要重做事务的时候就会有影响,例如 灾难恢复(crash recovery) 在数据库恢复(restore)操作期间。对 日志备份操作(log backup operation) 也有影响在这2个方面SQL Server必须复制到备份文件,但在這里SQL Server不能做到

灾难恢复,也叫做重新恢复是SQL Server任何时候将数据库重新上线的过程。例如如果数据库没有正常关闭,数据库重启的时候會读取数据库事务日志它会撤销关闭时任何未提交的事务,重做已经提交但没写入硬盘永驻的事务

这是可行的,因为在第一篇里讨论嘚 预写式日志(Write Ahead Logging) 机制保证数据修改相关的日志记录在事务提交前或修改的数据写入硬盘前预先写入硬盘。SQL Server可以在任何时候写入更改到數据文件在事务提交前或之后,通过检查点或惰性写入器因此,对于一般的操作(例如完整记录的)SQL Server在事务日志里有足够的信息来表明一个操作是否要撤销或重做,有足够的信息来前滚或后滚

对于最小化日志的操作,然而前滚是不可能了因为在日志里没有足够的信息。因此当在简单或大容量日志恢复模式里处理最小化日志时另一个过程, 勤奋写入器(Eager Write) 保证通过最小化日志的任何区修改的大嫆量操作,在事务完成前都硬写入硬盘这和在事务完成之前就写入日志的普通操作,数据页写入是通过系统进程(惰性写入器或检查点)完成有鲜明的对比

这意味着灾难恢复从不重做最小化日志操作,因为SQL Server会保证数据页修改会在事务提交前写入硬盘因此最小化日志对災难恢复过程毫无影响。

SQL Server写日志记录和修改数据页在事务提交前写入硬盘的要求的一个副作用是与常规的事务相比,最小化日志操作会稍慢如果数据文件不能处理大量的写。最小化日志通常比常规操作快但并不能保证。只有一个可以保证:它们写入更少的信息到事务ㄖ志

当恢复完整,差异或日志备份时SQL Server也需要进行重做操作。我们已经谈到对于最小化日志操作,对于最小化日志操作受影响的页茬事务完成时写入硬盘,因此SQL Server直接复制这些页到任何完整或差异备份文件从这些备份里恢复未影响的页。

然而从日志备份里恢复会更有趣如果日志备份只包含相关区分配的日志记录,那么在日志备份恢复上没有办法重建最小化日志操作影响的分区内容。这是因为如峩们刚才所看到的,日志不包含插入的数据只有区分配和原数据。

当有最小化日志操作时为了启用日志恢复包括在日志备份里不只是ㄖ志记录,也有任何区(8页一组)的镜像受最小化日志操作影响的。这不意味着它们的镜像是最小化日志操作后的但页是日式备份时嘚。SQL Server维护一个位图分配页叫做ML map或bulk-logged change map,每个区都有一个位任何收最小化日志操作影响的区都会标记为1.日志备份操作读取这个页而知道在备份里应该具体包含哪些页。然后日志备份会清空这个ML map

因此,例如假设我们有如插图6.7所示的时间点日志备份发生在10:00,然后在1点最小化日誌操作(例如一个BULK INSERT)影响了页在2点一个UPDATE影响了1310页和1311页,在3点的时候另一个日志备份发生了

(插图6.7:数据库操作和日志备份时间轴)

在10:30嘚日志备份,备份的日志记录覆盖了10:00-10:30的因为在那个日志段有个最小化日志操作,它复制因最小化日志操作影响的区到日志备份里复制叻它们,因此它们会出现在日志备份里因此它们会映射BULK INSERT和UPDATE的效果,加上在UPDATE和日志备份期间可能发生的任何进一步修改

这影响到我们如哬能恢复日志,也会影响日志备份的大小在某些特定情况下,也会影响尾日志备份这个我们在下一部分会详细谈到。

我们来看下最小囮日志操作会如何影响时间点恢复插图6.8描述了2个数据库的典型备份时间轴。绿色待变完整数据备份黄色代表一系列的日志备份。2个数據库的唯一区别是第一个数据库运行在完整恢复模式第二个数据库运行在大容量日志恢复模式。

(插图6.8:数据库备份时间线)

第5个日志備份时间片是10:00-10:30在10:10,一个BULK INSERT命令(1位置)加载了一系列数据这个大容量数据加载一下子就完成了,但在10:20的时候有个不相关的事情发生一個用户运行了“流氓的”数据修改命令(2位置),关键数据丢失了项目经理通知DBA团队,要求他们恢复到导致数据丢失的事务前在10:20前。

茬完整恢复模式的数据库里这不是问题。大容量数据加载被完整记录我们可以恢复数据库到日志文件里的任何时间点。我们直接恢复朂近一次完整数据库备份使用without recovery,应用日志文件到不幸数据丢失事件发生前的时间点使用RESTORE LOG命令,带STOPAT参数停止恢复操作到10:20前的某个时间點。

在大容量日志数据库里我们有个问题。我们恢复数据库到第1个4个日志日志备份的任何时间点但不能恢复到第5个日志备份,因为它包含最小化日志操作记住对于这个日志备份,我们只有受最小胡日志操作影响的分区信息它们存在于日志备份的时间上。第5个日志备份的恢复是“孤注一掷”:要么我们不应用这个日志文件的所有操作停止恢复到第5个文件尾,或者应用日志文件的所有操作恢复到文件尾,或者恢复第6个日志备份的任何时间点

如果我们尝试恢复到第5个日志备份,带有STOP AT 10:15(这是最小化日志操作和流氓修改之间的时间点)SQL 不會继续往下进行剩下的日志备份,找出页上受最小化日志操作影响的哪些操作需要撤销它会更简单的反馈:

遗憾的是,如果我们应用整個第5个日志备份它会挫败恢复目的,因为错误进行的提交它修改日志文件内部内容,因此我们直接删除了我们尝试恢复回来的数据!峩们没有选择只能恢复第4个日志尾,恢复数据库然后报告在这个时间后的任何数据丢失。

当数据库选择运行在大容量日志模式里时洳果日志段里有最小化日志操作,我们不能恢复数据库到指定时间点这是我们必须要考虑的,不管是短期还是长期运行判断日志备份裏是否包含最小化日志操作是很容易的。RESTORE HEADERONLY返回备份的详细问题信息包括在 HasBulkLoggedData 列里。另外在MSDB数据库的backupset表里也有has_ BULK_LOGGED _data列。如果这列值为1那么日誌备份包含最小化日志操作,可以全部恢复或全部丢失那就是说,在计划或执行恢复时得到这个消息是个令人很不愉快的意外

最小化ㄖ志操作影响的页需要拷贝到日志备份,影响日志备份的大小基本上,在大容量恢复模式的数据库里对于大容量操作实际的日志增长會很少,与完整恢复模式的数据库相比日志备份大小不会更小,对于完整恢复模式来说相比较的日志备份会更大。

为了验证最小化日誌操作的影响还有大容量恢复模式在日志备份大小上。我们来看一个简单的例子

首先,重新运行代码6.3片段删除很重建BulkLoggedRecovery数据库,设置恢复模式为大容量恢复模式再进行一次完整数据库备份。

接下来运行代码6.6在SomeTable表里创建50万条记录。

然后就我们检查下当前日志空间使鼡率,然后备份日志

日志大小只有24MB,看到这个备份日志的大小你会很惊讶,在我的测试里近1GB!

对于完整恢复的数据库你会发现日志夶小和日志备份大小都会近1GB!

我们假设有硬件故障导致了数据损坏,但是数据库还是在线的我们希望恢复数据库。使用BACKUP LOG...WITH NORECOVERY会捕获日志文件嘚剩余内容,把数据库放入还原状态这样的话没有任何事务可以成功提交到数据库,我们可以进行还原操作这种尾日志备份,和通常嘚日志备份一样数据库需要在线(这样的话,SQL Server可以根据日志备份可以把信息标入数据库头)

但是,假设对数据的损坏太厉害数据库變得不可用,尝试无法将数据库恢复在线如果数据库在完整恢复模式,有定期的日志备份那么只要日志文件还是可用的,我们可以进荇一次尾日志备份但使用NO_TRUNCATE选项,例如BACKUP LOG...NO_TRUNCATE这个选项会备份日志文件而不截断它,而且不需要数据库在线

使用已有的备份(完整,差异(洳果有的话)还有日志)和尾日志备份,我们可以恢复数据库到失败前的指定时间点我们能这样做的原因是日志包含足够的信息来重建所有提交的事务。

但是如果数据库运行在大容量日志模式,在事务日志的活动部分有最小化日志那么日志没有包含足够的信息来重建所有提交的事务,当我们进行尾日志备份时实际的数据页是需要的。如果数据文件不可用那么尾日志备份不能复制需要的页来恢复┅致的数据库。我们用 BulkLoggedRecovery 数据库实际操作下

使用SQL Server服务关闭,进入数据文件夹删除 BulkLoggedRecovery 数据库的mdf数据文件,然后重启SQL Server这不算硬盘故障的完美模拟,但对于我们的演示目的已经达到

当SQL Server重启时,数据库是不可用的这一点也不奇怪,因为主数据文件丢失数据库状态是Recovery_Pending,表示SQL不能打开数据库在它上面运行故障恢复

很好,已经成功执行(尽管有警告在错误日志没有错误)。现在我们尝试恢复数据库,如代码6.11所示

成功执行,我们检查下恢复数据库的状态重新运行下代码6.9,你会发现数据库已经在线

我们再看看SELECT...INTO的SomeTable也存在,因此我们看看表里嘚数据(记住页分配是记录了,但页的内容是没有记录的)

注意,这个信息是来自SQL Server 2008R2如果你测试的其他版本的数据库,错误信息可能會不同这看起来并不好;我们运行DBCC看下数据库状态。

非常遗憾这看起来非常糟糕(TempDB空间还没用完)。现在唯一合理的选择是重新恢复但不恢复尾日志备份。这就意味着在正常日志备份和灾难点的任何提交的事务都丢失了

当决定数据库运行在大容量日志恢复模式的时間长短时,这个另一个要考虑的重要因素在完整恢复模式里,尾日志备份只需要访问事务日志因此,我们还可以备份事务日志即使由於例如硬盘故障导致MDF文件不可用但是,在大容量日志模式里如果字上次日志备份有最小化日志操作,这意味着我们不能进行尾日志备份如果数据文件包含有最小化日志操作的数据变得不可用。这个原因是当在大容量日志恢复模式里进行事务日志备份时SQL Server需要备份因大嫆量操作的修改的所有区事务日志备份文件,还有事务日志条目换句话说,SQL Server需要访问数据文件来进行尾日志备份

大容量日志使用最佳實践

最后,检查下数据库的SLA来看下数据丢失风险的可接受问题如果不允许数据丢失,那么计划所有操作在完整恢复模式里这会影响到ㄖ志的增长。如果你能在最大数据丢失范围允许内用最小化完整想要的操作即SLA指出的,那么你可以考虑使用大容量恢复模式

当使用大嫆量恢复模式时,它的黄金法则是尽量短时间使用且可能远隔离最小化操作到它们的日志本身。因此在切换到大容量日志模式前立即進行一次事务日志备份,切换回完整恢复模式后也立即进行一次日志备份这可以保证在日志间隔里的最小化日志操作的事务,时间尽可能短的数量尽可能数量小。

为了演示这个如何减少风险假设下列情景:

  • 凌晨1:00 完整备份
  • 凌晨1:15 事务日志备份1
  • 凌晨2:15 事务日志备份2
  • 凌晨2:40 切换到夶容量日志,大容量操作开始
  • 凌晨3:05 大容量操作结束
  • 凌晨3:10 ——灾难——MDF文件不可用
  • 凌晨3:15 事务日志备份3

在这个情况下凌晨3:15的日志备份会失败,接下来可以做一次尾日志备份我们只能恢复数据库到完整备份和第一个2个日志备份,因此我们丢失了近55分钟的数据

换另一个情况,峩们调整下就会有更好的情况:

  • 凌晨1:00 完整备份
  • 凌晨1:15 事务日志备份1
  • 凌晨2:15 事务日志备份2
  • 凌晨2:35 事务日志备份3
  • 凌晨2:40 切换到大容量模式,大容量操莋开始
  • 凌晨3:05 大容量操作结束
  • 凌晨3:05 切换回完整模式进行事务日志备份4
  • 凌晨3:10 ——灾难——MDF文件不可用
  • 凌晨3:15 事务日志备份5

这里,3:15的日志备份会夨败但随后我们能进行一次尾日志备份,因为日志备份4保证在活动日志里没有最小化日志操作那么我们恢复完整备份,4个事务日志备份还有尾日志备份,恢复数据库导凌晨3:15灾难前的时间点

即使有这些预防性的日志备份,最好还是正常备份之外进行任何的最小化日志操作当很少有其他事务进行的时候。这个方法如果出错的话,我们可以直接重新进行大容量加载来恢复数据

即使你通过在每个大容量操作前后进行额外的日志备份来最小化风险,还是不建议你连续运行数据库在大容量模式这个会非常困难,取决于你的环境对谁可能在什么时候进行最小化日志操作进行完全控制。记住:任何表拥有者可以在表上进行创建和重建索引;任何可以建表的人也可以运行SELECT...INTO语呴

最后,我们建议阅读下数据加载性能指南( )它在获得高速大容量数据修改提供很多建议,还有讨论了使用跟踪标记610如何衡量来自朂小化日志的潜在效益

大容量恢复模式提供这样一种方式:进行数据加载和一些例如索引重建数据库维护操作,不会产生在完整恢复模式里事务日志增长过快的问题但同时保持日志链是完整的。这个缺点包括如果灾难发生的话会有很大风险丢失大容量操作期间的数据換句话说,当还原的日志文件包含最小化日志操作你不能使用STOPAT选项。还原整个事务日志备份来前滚数据库还是可以的或者恢复数据库箌不包含最小化操作的事务前的时间点。但是在程序BUG里,或者用户误删造成的数据丢失在这最小化日志操作期间,是不能恢复到日志裏的特定时间点里日志记录删除的记录也不能恢复。

当使用大容量日志恢复模式时记住会增加数据丢失的风险,只在数据库维护或大嫆量数据加载操作时使用这个模式不是默认就使用大容量日志恢复模式。

尽管有潜在增加的风险它还是个可行且有用的选项,当DBA计划夶数据加载或索引维护时还是可以考虑的

非常感谢《 》的作者Shawn McGehee,为本篇数据库恢复部分提供了额外材料

也感谢您花这么长时间,这么耐心的看完这篇文章

}

我要回帖

更多关于 我上线他就下线 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信