访问数据时要使用的索引的选择就是这些因素之一。正如您将记住的,键和RID查找操作在I/O方面是昂贵的,并且SQL Server在估计将需要大量这些操作时不使用非集群索引。SQL Server维护有关索引的统计信息,在某些情况下还维护有关列的统计信息,这有助于执行这样的估计。
SQL Server统计介绍
SQL Server统计信息是在索引键值中,有时在常规列值中包含关于数据分布的信息的系统对象。可以在支持比较操作的任何数据类型上创建统计信息,例如>、<、=等。
让我们检查上一章中在清单2-15中创建的dbo.Books表中的IDX_BOOKS_ISBN索引统计信息。可以使用DBCC SHOW_STATISTICS(‘dbo.Books‘,IDX_BOOKS_ISBN)命令执行此操作。结果如图3-1所示。
图3-1. DBCC SHOW_STATISTICS输出
如您所见,DBCC SHOW_STATISTICS命令返回三个结果集。第一个包含有关统计信息的一般元数据信息,如名称、更新日期、更新统计信息时索引中的行数等。第一结果集中的Steps列指示直方图中的步骤/值的数量(稍后详细介绍)。密度值不由查询优化器使用,并且仅出于向后兼容的目的而显示。
第二个结果集,称为密度向量,包含有关来自统计(索引)的关键值组合的密度的信息。它是根据1/3的不同值公式计算的,它表明平均每个键值组合有多少行。即使IDX_Books_ISBN索引只定义了一个键列ISBN,它还包括作为索引行的一部分的聚类索引键。我们的表有12500个唯一的ISBN值,ISBN列的密度为1.0/1252500=7.984032E-07。(ISBN,BookId)列的所有组合也是唯一的,并且具有相同的密度。
最后一个结果集称为直方图。直方图中的每条记录,称为直方图步骤,包括统计(索引)最左侧列中的示例键值以及关于从前一个值到当前RANGE_HI_KEY值范围内的数据分布的信息。让我们更深入地研究直方图列。
让我们用清单3-1所示的代码将一组重复的ISBN值插入索引中。
清单3-1.将重复的ISBN值插入索引。
现在,如果再次运行DBCC SHOW_STATISTICS(“dbo.Books”,IDX_BOOKS_ISBN)命令,您将看到图3-2所示的结果。
图3-2.DBCC SHOW_STATISTICS输出
带有前缀104的ISBN值现在有重复,这会影响直方图。还值得一提的是,第二结果集中的密度信息也发生了变化。具有重复值的ISBN s的密度高于(ISBN,BookId)列的组合,这仍然是唯一的。
让我们运行SELECT BookId,Title FROM dbo.Books WHERE ISBN LIKE‘114%‘语句并检查执行计划,如图3-3所示。
图3-3. 执行计划查询
大多数执行计划操作员都有两个重要的属性。实际行数指示运算符执行过程中处理了多少行。估计行数指示在查询优化阶段为该运算符估计的SQLServer行数。在我们的例子中,SQLServer估计有2625行ISBNs从114开始。如果您查看图3-2所示的直方图,您将看到步骤10存储ISBN区间的数据分布信息,这些信息包括所选的值。即使使用线性近似,也可以估计要接近SQL Server所确定的行数。
关于统计有两件非常重要的事情要记住。
1.直方图仅存储最左侧统计(索引)列的数据分布信息。统计学中有关于键值的多列密度的信息,但就是这样。直方图中的所有其他信息仅涉及最左边的统计列的数据分布。
2.SQL Server最多保留直方图中的200个步骤,而不管表的大小以及表是否被分区。每个直方图步骤所覆盖的间隔随着表的增长而增加。这导致对于大型表的统计信息不那么准确。
在复合索引的情况下,当索引中的所有列都用作所有查询中的谓词时,将具有较低密度/较高唯一值百分比的列定义为索引的最左侧列是有益的。这将允许SQL Server更好地利用统计数据中的数据分布信息。但是,您应该考虑谓词的SARGability(可搜索性)。例如,如果所有查询都在where子句中使用FirstName=@FirstName和LastName=@LastName谓词,那么最好将LastName作为索引中最左边的列。然而,对于
FirstName=@FirstName和LastName<>@LastName,其中LastName不可SARGable。
列级统计
除了索引级统计之外,还可以创建单独的列级统计信息。此外,在某些情况下,SQL Server会自动创建这样的统计数据。让我们看一个示例,创建一个表,并用清单3-2所示的数据填充它。
66-65页
统计及执行计划
默认情况下,SQL Server自动创建和更新统计信息。在数据库级别上有两个选项可以控制这种行为:
■提示您可以使用STATISTICS_NORECOMPUTE索引选项控制索引级别上统计信息的自动更新行为。默认情况下,此选项设置为OFF,这意味着统计信息会自动更新。 在索引或表级别更改自动更新行为的另一种方法是使用sp_autostats系统存储过程。
SQL Server根据影响统计信息列的INSERT,UPDATE,DELETE和MERGE语句执行的更改次数确定统计信息是否已过时。SQL Server计算统计信息列的更改次数,而不是更改的行数。 例如,如果您将同一行更改100次,则将其计为100次更改而不是1次更改。
有三种不同的方案,称为统计信息更新阈值,有时也称为统计信息重新编译阈值,其中SQL Server将统计信息标记为过时。
在SQL Server 2016中,数据库兼容级别为130:大型表上的统计信息更新阈值将变为动态,并取决于表的大小。 表具有的行越多,阈值越低。在具有数百万甚至数十亿行的大型表上,统计信息更新阈值可能只是表中总行数的一小部分。SQL Server 2008R2 SP1及更高版本中的跟踪标志T2371也可以启用此行为。
表3-1总结了不同版本的SQL Server中的统计信息更新阈值行为
表3-1. 统计信息更新阈值和SQL Server版本
这导致我们得出一个非常重要的结论。 使用静态统计信息更新阈值,触发统计信息更新所需的统计信息列的更改次数与表大小成比例。表越大,统计信息自动更新的次数就越少。 例如,对于包含10亿行的表,您需要对统计信息列执行大约2亿次更改,以使统计信息过期。建议尽可能使用动态更新阈值。
让我们来看看这种行为如何影响我们的系统和执行计划。 此时,表dbo.Books有1,265,000行。 让我们在表中添加250,000行,前缀为999,如清单3-5所示。在此示例中,我使用的是未启用T2371的SQL Server 2012。如果在启用动态统计信息更新阈值的情况下运行它,则可以看到不同的结果。 此外,SQL Server 2014中引入的新基数估计器也可以改变行为。 我们将在本章后面讨论它。
清单3-5. 将行添加到dbo.Books
;with Postfix(Postfix) as ( select 100000001 union all select Postfix + 1 from Postfix where Postfix < 100250000 ) insert into dbo.Books(ISBN, Title) select ‘999-0‘ + convert(char(9),Postfix) ,‘Title for ISBN 999-0‘ + convert(char(9),Postfix) from Postfix option (maxrecursion 0);
现在,让我们运行SELECT * FROM dbo.Books WHERE ISBN LIKE‘999%‘查询,选择具有这种前缀的所有行。
如果检查查询的执行计划(如图3-7所示),您将看到非聚集索引查找和键查找操作,即使它们在您需要从表中选择近20%的行的情况下效率低下。
图3-7。 查询的执行计划选择具有999前缀的行
您还将在图3-7中注意到,Index Seek运算符的估计行数和实际行数之间存在巨大差异。 SQL Server估计表中只有31.4行,前缀为999,尽管有250,000行具有这样的前缀。结果,产生了非常低效的计划。
让我们通过运行DBCC SHOW_STATISTICS(‘dbo.Books‘,IDX_BOOKS_ISBN)命令来查看IDX_BOOKS_ISBN统计信息。 输出如图3-8所示。正如您所看到的,即使我们在表中插入了250,000行,统计信息也未更新,并且直方图中没有前缀999的数据。第一个结果集中的行数对应于上次统计信息更新期间表中的行数。 它不包括刚刚插入的250,000行。
图3-8. IDX_BOOKS_ISBN统计数据
现在让我们使用UPDATE STATISTICS dbo.Books IDX_Books_ISBN WITH FULLSCAN命令更新统计信息,然后再次运行SELECT * FROM dbo.Books WHERE ISBN LIKE‘990%‘查询。查询的执行计划如图3-9所示。估计的行数现在是正确的,并且SQL Server最终得到了一个更有效的执行计划,该计划使用聚集索引扫描,I / O读取比以前少了大约17倍。
图3-9. 统计信息更新后查询选择具有999前缀的行的执行计划
如您所见,不正确的基数估计可能导致执行计划效率极低。 过时的统计数据可能是不正确基数估计的最常见原因之一。您可以通过检查执行计划中的估计和实际行数来查明其中一些情况。 这两个值之间的巨大差异通常表明统计数据不正确。更新统计信息可以解决此问题并生成更高效的执行计划。
68-69页
数据维护
正如我已经提到的,默认情况下SQL Server会自动更新统计信息。对于小的表,这种行为通常是可以接受的;但是,对于数百万或数十亿行的大型表,您不应该依赖自动统计更新,除非您使用数据库兼容性级别为130或启用跟踪标志T2371的SQL Server 2016。要通过20%的统计数据更新阈值触发统计数据更新,所需要的更改数量将非常高,因此,更新不会被频繁地触发。
建议在这种情况下手动更新统计信息。在选择最佳统计维护策略时,必须分析表的大小、数据修改模式和系统可用性。例如,如果系统在业务时间之外没有负载,您可以决定每晚更新关键表的统计信息。不要忘记,统计数据和/或索引维护会给SQL Server增加额外的负载。您必须分析它如何影响同一服务器和/或磁盘阵列上的其他数据库。
在设计统计维护策略时要考虑的另一个重要因素是如何修改数据。对于键值不断增加或减少的索引,您需要更频繁地更新统计信息,例如当索引中最左边的列被定义为identity或使用序列对象填充时。如您所见,如果特定键值位于直方图之外,SQL Server会大大低估行数。在SQL Server 2014到2016年间,这种行为可能有所不同,我们将在本章后面看到。
您可以使用update statistics命令更新统计信息。当SQL Server更新统计信息时,它读取数据的一个示例,而不是扫描整个索引。您可以通过使用FULLSCAN选项来更改这种行为,该选项强制SQL Server读取和分析来自索引的所有数据。正如您可能猜到的那样,该选项提供了最准确的结果,尽管在大型表的情况下,它可能引入大量I/O活动。
注意,SQL Server在重新构建索引时更新统计信息。我们将在第6章“索引碎片”中更详细地讨论索引维护。
可以使用sp_updatestats系统存储过程更新数据库中的所有统计信息。建议您使用此存储过程,并在将其升级到新版本的SQL Server后更新数据库中的所有统计信息。您应该与DBCC UPDATEUSAGE存储过程一起运行它,该存储过程将纠正目录视图中不正确的页计数和行计数信息。
系统dm_db_stats_properties DMV显示自上次统计数据更新以来对统计数据列所做的修改的数量。代码利用了DMV,如清单3-9所示。
清单3 - 9使用sys.dm_db_stats_properties
select
s.stats_id as [Stat ID], sc.name + ‘.‘ + t.name as [Table], s.name as [Statistics]
,p.last_updated, p.rows, p.rows_sampled, p.modification_counter as [Mod Count]
from
sys.stats s join sys.tables
查询结果如图3-11所示,表明自上次统计信息更新以来,对统计信息列进行了25万次修改。您可以构建一个定期检查sys的统计维护例程。使用大的modification_counter值重新构建统计信息。
图3-11.Sys.dm_db_stats_properties输出
另一个与统计信息相关的数据库选项是自动异步更新统计信息。默认情况下,当SQL Server检测到统计信息过时时,它会暂停查询执行,同步更新和统计信息,并在统计信息更新完成后生成新的执行计划。通过异步统计信息更新,SQL Server使用旧的执行计划执行查询,该执行计划基于过时的statist,同时在后台异步更新统计信息。建议您保持同步统计信息更新,除非系统有非常短的查询超时,在这种情况下,同步统计信息更新可以超时查询。
最后,在创建新索引时,SQL Server不会自动删除列级统计信息。您应该手动删除冗余的列级统计数据对象。
第十五周翻译-《Pro SQL Server Internals, 2nd edition》
标签:提示 code 创建 暂停 构建 inf 1.4 例程 2016年
小编还为您整理了以下内容,可能对您也有帮助:
农村信用社20万存三年定期利息多少2020年
农村信用社属于农村商业银行。在基准利率的基础上,一般存款利率高于国有银行。2023年信用社3年期定期存款利率是多少?
目前,在2.75%的基础上,农村信用社3年期定期存款利率上浮70个基点至3.45%,3年期大额存单上浮80个基点至3.55%,幅度还是比较大的。
现在如果你手里有30万,想去农村信用社存定期存款,可以满足大额存单的条件。如果你购买3年期大额存单
年利息=30万* 3.55%=10650元。由于银行定期存款按单利计息,三年的总利息=10650 * 3=31950元。
那么,如果你在农信社存30万张3年期存单,要多久才能达到100万?
其实这个也很好算。我们都知道定期存款在期限内是有单利的。如果到期后将本息作为下期本金存入,那么就可以定期实现复利,以3年为一个周期。
首先我们计算3年期定期存款的本息=30万*(13.55% * 3)=331950元。
假设我们需要存T期,本息可以达到100万。
然后列出方程,300,000 * (1 3.55% * 3) t=1,000,000,通过计算可以得到T=12。
也就是说,需要12个周期,36年,存入的30万可以连本带利达到100万。
虽然银行存款有利息和本金保证,但是大部分人还是不能接受这种财富增值的方式,因为他们觉得36年后100万的购买力可能还不如现在30万的购买力,因为这期间有通货膨胀。
但我想说的是,在没有更安全、更有保障的投资渠道之前,把钱存一段时间,积累资本,也是一个极好的选择。如果本金积累到一定程度,等财富机会来了再做资本运作也不迟。
委托代理合同上写的是甲方须按标的金额的20%支付办案律师费,标的是4万,最后取得的2万,应付多少的律师
你和律师签订的是民事诉讼委托代理合同。律师应当以其所在律师事务所的名义统一收案收费的,而不是个人,双方的权利义务在合同上都有明确的规定,所以你不用担心会遇到只收钱不负责的问题。一般来讲,律所里都是同一格式的合同,双方只要确认下代理内容就可以了。我找了份合同范本,你可以看下。
民事诉讼委托代理合同
甲方(单位用):
法定代表人:
地址:
邮政编码:
电话:
传真:
甲方(个人用)姓名: 性别:
住址: 电话:
身份证号:
乙方: 律师事务所
地址:
邮政编码:
电话:
传真:
甲方因 纠纷一案,根据中华人民共和国《合同法》、《民事诉讼法》、《仲裁法》和《律师法》等有关法律的规定,聘请乙方的律师作为委托代理人。
甲、乙双方按照诚实信用原则,经协商一致,立此合同,共同遵守。
第一条 委托代理事项
甲方委托乙方代理事项包括(划√为确认,划×为否认):
□提供处理委托事项的咨询意见;
□代理甲方与对方或有关方进行交涉、协商或和解;
□代理一审诉讼;
□代理二审诉讼;
□代理执行。
第二条 委托代理权限(见授权委托书)
一般代理或者全权代理,包括(划√为确认,划×为否认):
□变更或者放弃诉讼请求;
□承认诉讼请求;
□提起反诉;
□进行调解或者和解;
□提起上诉;
□申请执行;
□收取或者收转执行标的;
□签署、送达、接收法律文书。
第三条 甲方的义务
1、甲方应当真实、详尽和及时地向乙方律师叙述案情,提供与委托代理事项有关的证据、文件及其他事实材料;
2、甲方应当积极、主动地配合乙方律师的工作,甲方因代理需要对乙方律师提出的要求应当明确、合理;
3、甲方应当按时、足额向乙方支付律师代理费和工作费用;
4、甲方指定 为与乙方律师的联系人,负责转达甲方的指示和要求,提供文件和资料等,甲方更换联系人应当及时通知委托代理人;
5、甲方有责任对委托代理事项做出的判断、决策,甲方根据乙方律师提供的法律意见、建议、方案所做出的决定而导致的损失,非因乙方律师错误运用法律等失职行为造成的,由甲方自行承担。
第四条 乙方的义务
1、乙方指派 、 律师作为上述案件中甲方的委托代理人,甲方同意上述律师指派其他业务助理配合完成辅助工作,但乙方更换代理律师应取得甲方认可;
2、乙方律师应当勤勉、尽责地完成第一条所列委托代理事项;
3、乙方律师应当以其依据法律做出的判断,向甲方进行法律风险提示,尽最大努力维护甲方利益;
4、乙方律师应当根据审理机关的要求,及时提交证据,按时出庭,并应甲方要求通报案件进展情况;
5、乙方律师不得违反《律师执业规范》,在涉及甲方的对抗性案件中,未经甲方同意,不得同时担任与甲方具有法律上利益冲突的另一方的委托代理人;
6、乙方律师对其获知的甲方的商业机密或者甲方的个人隐私负有保密责任,非由法律规定或者甲方同意,不得向任何第三方披露;
7、乙方对甲方业务应当单独建档,应当保存完整的工作记录,对涉及甲方的原始证据、法律文件和财物应当妥善保管。
第五条 律师代理费
本案诉讼标的额为 元。依据《辽宁省律师服务收费管理实施办法》和《大连市律师服务收费标准》,经双方协商同意,按标的额的 %收取,共 元。
(实行风险代理收费,最高收费金额不得高于收费合同约定标的额的3 O%)
第六条 工作费用
乙方律师办理甲方委托代理事项所发生的下列相关行政、司法、鉴定、公证等部门收取的费用和其他费用,由甲方承担(划√为确认,划×为否认):
□诉讼费 元人民币;
□仲裁费 元人民币;
□鉴定费 元人民币;
□公证费 元人民币;
□查档费 元人民币;
□差旅费(大连市内四区以外代理案件发生的) 元人民币;
□长途通讯费 元人民币;
□复印费 元人民币;
□翻译费 元人民币;
□资料费 元人民币;
□其他 元人民币。
甲方可按照乙方律师要求提前预支或事后实报实销方式给付上述工作费用。
乙方律师应当本着节俭的原则合理使用工作费用。
乙方律师不得向甲方收取除代理费和工作费以外的任何费用。
乙方律师收取甲方所有费用须向甲方出具收取凭证。
上述费用的支付方式(划√为确认,划×为否认):
□自本合同生效后 日内支付 元人民币;
□自 后 日内支付 元人民币;
□双方约定的支付方式:
。
(甲乙双方签订合同后,乙方不得单方变更收费项目或者提高收费数额。确需变更的,必须事先征得甲方书面同意)
本合同终止后或者提前解除的,应当由双方书面确认并结清有关费用。
第七条 合同的解除
甲乙双方经协商同意,可以变更或者解除本合同。
乙方有下列情形之一的,甲方有权解除合同:
1、未经甲方同意,擅自更换代理律师的;
2、因乙方律师工作延误、失职、失误导致甲方蒙受损失的;
3、违反第三条第5-7项规定的义务之一的。
甲方有下列情形之一的,乙方有权解除合同:
1、甲方的委托事项违反法律或者违反律师执业规范的;
2、甲方有捏造事实、伪造证据或者隐瞒重要情节等情形的;
3、甲方逾期 日仍不向乙方支付律师代理费或者工作费用的。
第八条 违约责任
乙方无正当理由不提供第一条规定的法律服务或者违反第四条规定的义务,甲方有权要求乙方退还部分或者全部已付的律师代理费。
乙方律师因工作延误、失职、失误导致甲方蒙受损失,或者违反第三条第5-7项规定的义务之一的,乙方应当通过所其投保的执业保险向甲方承担赔偿责任。
甲方无正当理由不支付律师费、未报销的工作费用,或者无故终止合同,乙方有权要求甲方支付未付的律师费、未报销的工作费用以及延期支付的利息。
甲方不得以如下非正当理由要求乙方退费:
1、甲方单方面又委托其他律师事务所律师代理的;
2、乙方完成委托代理事项后,甲方以乙方收费过高为由要求退费的;
3、甲方作为被告时,乙方律师已经为出庭作好准备,而原告方撤诉的;
4、其他非因乙方或者乙方律师的原因,甲方无故终止合同的。
第九条 争议的解决
本合同适用中华人民共和国《合同法》、《律师法》、《民事诉讼法》、《仲裁法》等法律。
1、甲、乙双方如果因本合同内容的履行发生争议,应当友好协商解决。如协商不成,任何一方均应将争议提交大连仲裁委员会按照提交仲裁时该会现行有效的仲裁规则进行仲裁,仲裁裁决是终局的,对甲、乙双方均有约束力。
2、甲方因乙方律师收费发生的纠纷,应依据《辽宁省律师服务收费管理实施办法》第十七条,到相关物价管理部门进行举报或投诉。
3、甲方因乙方在执业中有违反律师执业纪律或执业道德行为,甲方有权向所属司法行政机关或律师协会投诉,但应提供充分的证据。
第十条 合同的生效
本合同正本一式两份,甲、乙双方各执一份,由甲乙双方代表签字并加盖公章,自 年 月 日之日起生效,至乙方完成甲方所委托的代理事项为止。如需变更另行协议。
第十一条 通知和送达
甲、乙双方因履行本合同而相互发出或者提供的所有通知、文件、资料,均以扉页所列明的地址、传真送达,一方如果迁址或者变更电话,应当书面通知对方。
通过传真方式的,在发出传真时视为送达;以邮寄方式的,挂号寄出或者投邮当日视为送达。
甲方对以上合同已认真阅读,不理解的条款已向乙方咨询,现已明确合同内容及签约的后果。
甲方: 乙方: 律师事务所
代表: 代表:
年 月 日 年 月 日
盖西伯拘而演《周易》;仲尼厄而作《春秋》;屈原放逐,乃赋《离骚》;左丘失明,厥有《国语》;%C
出处《报任安书》司马迁
原文:盖西伯(文王)拘而演《周易》;仲尼厄而作《春秋》;屈原放逐,乃赋《离》;左丘失明,厥有《国语》;孙子膑脚,《兵法》修列;不韦迁蜀,世传《吕览》;韩非囚秦,《说难》《孤愤》;《诗》三百篇,大底圣贤发愤之所为作也。此人皆意有所郁结,不得通其道,故述往事、思来者。乃如左丘明无目,孙子断足,终不可用,退而论书策,以舒其愤,思垂空文以自见。
翻译:西伯姬昌披拘禁而演绎《周易》;孔子受困厄而作《春秋》;屈原被放逐,才写了《离》;左丘明失去视力,才有《国语》;孙膑被截去膝盖骨,《兵法》才撰写出来;吕不韦被贬谪蜀地,后世才流传着《吕氏春秋》;韩非被囚禁在秦国,写出《说难》、《孤愤》;《诗》三百篇,大抵都是一些圣贤发愤而写作的。这些都是人们感情有压抑郁结不解之处,不能实现其理想,所以记述过去的事迹,使将来的人了解他的志向。就象左丘明没有了视力,孙膑断了双脚,终于不能被人重用,便退而著书立说来抒发他们的怨愤,想留下没有实行的文章来表露自己的本心。