摘要:设计模式的实现并不难,对着例子来,很快就能敲出来。但是,在什么情况下用什么设计模式,这是个问题,最近总结了一下:设计模式用法单例保证类的实例只有一个简单工厂根据参数创建对应具体子类策略算法、规则的封装、传入具体调用,调用具体算法装饰者动态对一个对象进行增属性、调用方法等操作,链式操作,随意组合。...
阅读全文
|
11 2013 档案
摘要:设计模式的实现并不难,对着例子来,很快就能敲出来。但是,在什么情况下用什么设计模式,这是个问题,最近总结了一下:设计模式用法单例保证类的实例只有一个简单工厂根据参数创建对应具体子类策略算法、规则的封装、传入具体调用,调用具体算法装饰者动态对一个对象进行增属性、调用方法等操作,链式操作,随意组合。...
阅读全文
摘要:使用.Net建立的可执行程序*.exe,并没有直接承载到进程当中,而是承载到应用程序域(AppDomain)当中。应用程序域是.Net引入的一个新概念,它比进程所占用的资源要少,可以被看做是一个轻量级的进程。一个应用程序域可以有多个线程,一个线程也可以穿梭于多个应用程序域。 在一个进程中可以包含多个应用程序域,一个应用程序域可以装在一个可执行程序(*.exe)或者多个程序集(*.dll)。这样可以使应用程序域之间实现深度隔离,即使进程中的某个应用程序域出现错误,也不会影响其他应用程序域的正常运作。 当一个程序集同时被多个应用程序域调用时,会出现两种情况:CLR分别为不同的应用程序域加载...
阅读全文
摘要:一、深入了解.Net上下文3.1 .NET上下文的概念 应用程序域是进程中承载程序集的路基分区,在应用程序域当中,存在更细粒度的用于承载.Net对象的实体,用于承载.Net实体的东西就叫.Net上下文Context。所有的.Net对象都存在于上下文当中,每个AppDomain当中至少存在一个默认上...
阅读全文
摘要:一、多线程I/O 1、单线程采集100个页面 class Program { static int i = 6991275; static void Main(string[] args) { Stopwatch sw = new Stopwatch(); sw.Start(); getTitle(
阅读全文
摘要:总结了一下VS的使用快捷键, 以下这些是必须转化为肌肉记忆的。1、Ctrl+Shift+V循环粘贴不同的内容 剪贴板最多可以保存20项内容,通过Ctrl+Shift+V可以循环粘贴出之前复制过的内容。2、Ctrl+W选中当前单词 鼠标放在一个单词上面,Ctrl+W能够帮助你选中一个单词。如图...
阅读全文
摘要:在学习动态SQL语句之前,首先必须对条件查询有一定了解,先来学习如何向IBatis.Net的映射文件里传入参数。一、条件查询 1、传递单个参数 如根据Id查询: 调用的方法是:PersonModel p = mapper.QueryForObject("SelectPersonBy...
阅读全文
摘要:为了改进性能,分析重编译的起因很重要。往往,重编译可能并不需要,可以避免它以改进性能。了解导致重编译发生的不同条件有助于评估重编译的起因,并决定在重编译不必要时避免它的方法。 存储过程重编译在以下情况下发生:存储过程语句中引用的常规表、临时表或视图的架构变化。架构变化包括表的元数据或表上索引的变化;常规或临时表的列上的绑定(如默认/规则)变化。表索引或列上的统计的变化超过一定的阈值。存储过程编译时一个对象不存在,但是在执行期间创建(延迟对象解析);SET选项变化;执行计划老化并释放;对sp_recompile系统存储过程的显式调用。显式使用RECOMPILE子句; 可以在Profile...
阅读全文
摘要:存储过程通过明确地将查询的可变部分转换为参数来增进执行计划的可重用性。这使执行计划在查询以可变部分的相同或不同值重新提交时可以被重用。存储过程包含一组复杂的SQL语句,使生成存储过程的执行计划的代价有些高。因此,通常重用存储过程的执行计划来代替生成新计划是有利的。但是,有时候现有的计划可能不适用或者在重用期间可能不能提供最佳的处理策略。SQL Server重编译存储过程中的语句来生成一个新的执行计划,以解决这个问题。一、重编译的好处 存储过程的重编译既有好处又有缺点,有时候,为查询考虑一个新的处理策略而不是重用现有计划可能更经济。特别是表(或对应的统计)中数据的分布变化或者表中添加了新的...
阅读全文
摘要:计划缓冲的基本目的是通过重用执行计划来改进性能。因为,确认执行计划确实可重用很重要。因为即席查询的计划可重用性效率低下,所以一般建议尽可能依赖预定义工作负载技术。为了确保计划缓冲的高效实用,遵循以下建议。明确地参数化查询的可变部分;使用存储过程实现业务功能;使用sp_executesql避免存储过程维护;使用准备/执行模式避免重新发送查询字符串;避免即席查询;对动态查询使用sp_executesql代替EXECUTE;小心地参数化查询的可变部分;避免修改链接之间的环境设置;避免查询中对象的隐含解析;一、明确地参数化查询的可变部分 查询一般运行多次,每次运行的唯一不同是可变部分的不同值。它...
阅读全文
摘要:查询计划hash和查询hash 在SQL Server 2008中引入的围绕执行计划和缓冲的新功能被称为查询计划hash和查询hash。这是使用针对查询或查询计划的算法来生成二进制hash值的二进制对象。 可以从sys.dm_exec_query_stats或sys.dm_exec_requests检索查询计划hash和查询hash。虽然这是确认查询及其计划的一种机制,但是hash值不是唯一的。不相似的查询可能得出相同的hash,所以不能将其作为备份主键。 分别创建两个查询如下:SELECT * FROM PersonHunderThousand INNER JOIN ProvinceO...
阅读全文
摘要:当查询被提交时,SQL Server检查过程缓冲中匹配的执行计划,如果没有找到,SQL Server执行查询编译和优化以生成新的执行计划。 如果执行计划存在于缓冲中,它在私有的执行上下文中重用,这节约了CPU的编译和优化周期。 具有不同过滤条件的相同查询提交到SQL Server时,如:SELECT * FROM Person WHERE Id = 1 当这个查询被提交时,优化器创建一个执行计划并将其存储在过程缓冲中以被将来重用。如果这个查询使用不同的过滤条件,如:WHERE Id = 2重新提交,重用前面提供的过滤条件值所用的现有执行计划是有利的。但是为一个过滤条件值创建的执行计划...
阅读全文
摘要:一、执行计划缓冲 优化器生成的执行计划保存在SQL Server内存池中的一个特别部分,被称为计划缓冲或过程缓冲。过程缓冲是SQL Server缓存的一部分。在缓冲中保存计划可使SQL Server避免在重新提交相同的查询时再次通过整个查询优化过程运行。SQL Server支持不同的技术,如:计划缓冲老化,计划缓冲类型来增加缓存的计划的可重用性。它还保存两个被称为hash和查询计划hash的二进制值。二、执行计划组件 优化器生成的执行计划包含两个组件:查询计划:这代表指定执行查询所需要的物理操作命令;执行上下文:这维护给定用户上下文中查询的可变部分; 1、查询计划 查询计划是一个可再入...
阅读全文
摘要:SQL Server使用许多技术来优化资源消耗:基于语法的查询优化;无用计划匹配以避免对简单查询的深度优化;根据当前分布统计的索引和连接策略;多阶段的查询优化以控制优化开销;执行计划缓冲以避免重新生成执行计划; 以上技术按以下顺序执行:解析器;代数化器;查询优化器;执行计划生成,缓冲和hash计划生成;查询执行; 其执行顺序如下: 一、解析器(parser) 当查询被提交时,SQL Server将它传递给关系引擎中的解析器。 关系引擎-负责解析、名称和类型解析、优化和按照查询执行计划执行查询并从存储引擎请求数据; 存储引擎-负责数据访问、修改、缓冲; 解析器检查进入的查询,验...
阅读全文
摘要:1、创建统计语法:CREATE STATISTICS statistics_name ON { table_or_indexed_view_name } ( column [ ,...n ] ) [ WHERE ] [ WITH [ [ FULLSCAN | SAMPLE number { PERCENT | ROWS } | STATS_STREAM = stats_stream ] [ , ] ] [ NORECOMPUTE ] ] ; ::= [AND ] ::= | ...
阅读全文
摘要:location.href这个东西常常用于跳转,location既是window对象的属性,又是document对象的属性。JavaScript hash 属性 -- 返回URL中#符号后面的内容JavaScript host 属性 -- 返回域名JavaScript hostname 属性 -...
阅读全文
摘要:SQL Server允许用户手工地控制单独数据库中的统计维护。SQL Server的4个主要的控制紫铜统计的维护的配置如下:在无索引的列上新建统计(自动创建统计);更新现有统计(自动更新统计);用于收集统计的采样度;现有统计的异步更新(自动异步更新统计); 可以在数据库级别(所有表上的所有索引和统计)或基于单个索引或统计情况下来控制上述配置。自动创建统计设置仅适用于非索引列,因为SQL Server在索引创建时始终为一个索引键创建统计。自动更新统计设置的异步版本适用于索引和WHERE子句中没有索引的列。一、自动维护 默认情况下,SQL Server自动处理统计。自动创建统计和自动更新统...
阅读全文
摘要:非索引列上的统计 有时候,可能在连接或过滤条件中的列上没有索引。即使对这种非索引列,如果查询优化器知道这些列的数据分布(统计),它也很可能做出最佳的选择。 除了索引上的统计,SQL Server可以在没有索引的列上建立统计。即使不是索引列,当你开启了SQL Server自动创建统计功能,SQL Server就自动在执行WHERE、JOIN等查询列上创建统计。数据分布的信息或者特定值出现在非索引列上的可能性,都能够帮助查询优化器确定最优的处理策略。即使查询优化器不能真正使用索引来定位这些列,这也仍然对其有利。如果SQL Server确信这些信息对创建更好的计划有利(这通常发生于这些列被用于一..
阅读全文
摘要:一、索引在查询优化中的角色 SQL Server的查询优化器是基于开销的优化器、它通过确认选择性、数据的唯一性以及过滤数据(通过WHERE或JOIN子句)所使用的列来决定最佳的数据访问机制。统计与索引一同存在,但是它们也作为断言的一部分存在于没有索引的列上。 作为谓词引用的列中数据分布的最新信息帮助优化器确定所使用的查询策略。在SQL Server中,这个信息以统计的形式维护,这对于基于开销的优化器创建一个有效的查询执行计划是很重要的。通过统计,优化器能做出返回结果集或中间结果集所花费时间的精确估计,从而确定最高效的操作。只要确定数据库已经进行了默认的统计设置,优化器就能尽其所能地动态确定..
阅读全文
摘要:在有大量事务的数据库中,表和索引随着时间的推移而碎片化。因此,为了增进性能,应该定期检查表和索引的碎片,并对具有大量碎片的进行整理。 1、确定当前数据库中所有需要分析碎片的表。 2、确定所有表和索引的碎片。 3、考虑一下因素以确定需要进行碎片整理的表和索引。 高的碎片水平-avg_fragmentation_in_percent大于20%; 不是非常小的表或索引-也就是page_count大于8的; 4、整理具有大量碎片的表和索引; 这里给出一个样板SQL存储过程,它执行以下操作; 遍历系统上的所有数据库并确认符合碎片条件的每个数据库中表上的索引,并将它们保存到一个临时表中...
阅读全文
摘要:SQL Server提供了一个被称为数据库引擎调整顾问的工具。这个工具帮助为一个给定的工作负载确认一组最优的索引,而不需要对数据库结构或SQL Server内部结构的深入了解。它还能为一小部分有问题的查询建议调整选项。除了好处该工具也有坏处。应该正确地使用。一、数据库引擎调整顾问机制 可以直接选择SQL Server 2008=》性能工具=》数据库引擎调整顾问来使用它。 从Management Studio运行一个查询(选中所需查询,选择查询=》在数据库引擎调整顾问中分析查询),或者从Management Studio=》选择=》数据库引擎调整顾问中运行它。一旦该工具被打开并且连接到一...
阅读全文
摘要:一、分析查询执行计划 执行计划的阅读顺序为,从右到左,从上到下。 由执行计划表示的查询执行的一些特征如下:如果查询由多个查询的批组成,每个查询的执行计划按照执行的顺序显示。批中的每个执行计划将有一个相对的估算开销,整个批的总开销为100%。执行计划中的每个图标代表一个操作符。它们每个都有一个相对的估算开销,执行计划中的所有节点的总开销是100%。执行计划中的一个起始操作符通常表示一个数据库对象(表或索引)的数据检索机制。数据检索通常是一个表操作或一个索引操作。索引上的数据检索将是索引扫描或索引超找。索引上的数据检索的命名管理师[表名].[索引名]。数据从右到左两个操作符之间流动,由一个连接..
阅读全文
摘要:SQL Server有3种连接类型:Hash连接;合并连接;嵌套循环连接; 在许多影响小的行集的简单查询中,嵌套循环连接远远优于hash和合并连接。用于查询的连接类型由优化器动态决定。 下面我来先来建立两张简单的表。Province(十条数据)=》PersonTenThousand(1万数据),省份和人的关系,一对多,外键相连;一、Hash连接 为了理解哈希连接,在这个连接中PersonTenThousand在连接列PId上没有任何索引,先来看看如下查询: 可以看到,优化器在两个表之间使用了Hash连接。这种情况经常出现于下表(大表)较大,并且下表(大表)的连接列上没有索引。 ...
阅读全文
摘要:尽管查询的执行计划提供了详细的处理策略的单独步骤涉及的估计相对开销,但是它没有提供查询实际的CPU使用、磁盘读写或持续时间等开销。 还有其他比运行Profiler更直接手机性能数据的方法一、客户统计 客户统计将计算机作为服务器的一个客户端,从这个角度出发去捕捉执行信息。这意味着任何记录事件包括通过网络传送数据的时间,而不仅仅是SQL Server本身所花费的时间。 要使用客户统计,只需要单击=》查询=》包含客户统计。 现在,每当运行一个查询,就会收集一个限定的数据集,包括执行事件,影响的行数、到服务器的往返次数等。进一步,查询的每次执行在客户统计选项卡上被分别显示,有一列将多次的执...
阅读全文
摘要:当SQL Server的性能变差时,最可能发生的是以下两件事:首先,某些查询产生了系统资源上很大的压力。这些查询影响整个系统的性能,因为服务器无法足够快速地服务其他SQL查询。另外,开销较大的查询阻塞了其他请求相同数据库资源的查询,进一步降低了这些查询的性能。优化开销较大的查询不仅改进它们本身的性能,而且减少数据库阻塞和SQL Server资源压力从而提高了其他查询的性能。识别开销较大的查询 SQL Server的目标是在最短时间内将结果集返回给用户。为此,SQL Server查询优化器生成一个成本效益高的查询执行计划。查询优化器计算许多因素的权重,包括执行查询所需要的CPU、内存以及磁...
阅读全文
|