with(nolock)详解

大家在写查询时,为了性能,往往会在表后面加一个nolock,或者是with(nolock),其目的就是查询是不锁定表,从而达到提高查询速度的目的。 什么是并发访问:同一时间有多个用户访问同一资源,并发用户中如果有用户对资源做了修改,此时就会对其它用户产生某些不利的影响,例如: 1:脏读,一个用户对一个资源做了修改,此时另外一个用户正好读取了这条被修改的记录,然后,第一个用户放弃修改,数据回到修改之前,这两个不同的结果就是脏读。 2:不可重复读,一个用户的一个操作是一个事务,这个事务分两次读取同一条记录,如果第一次读取后,有另外用户修改了这个数据,然后第二次读取的数据正好是其它用户修改的数据,这样造成两次读取的记录不同,如果事务中锁定这条记录就可以避免。 3:幻读,指用户读取一批记录的情况,用户两次查询同一条件的一批记录,第一次查询后,有其它用户对这批数据做了修改,方法可能是修改,删除,新增,第二次查询时,会发现第一次查询的记录条目有的不在第二次查询结果中,或者是第二次查询的条目不在第一次查询的内容中。 为什么会在查询的表后面加nolock标识?为了避免并发访问产生的不利影响,SQL Server有两种并发访问的控制机制:锁、行版本控制,表后面加nolock是解决并发访问的方案之一。 1> 锁,每个事务对所依赖的资源会请求不同类型的锁,它可以阻止其他事务以某种可能会导致事务请求锁出错的方式修改资源。当事务不再依赖锁定的资源时,锁将被释放。 锁的类型:1:表类型:锁定整个表;2:行类型:锁定某个行;3:文件类型:锁定某个数据库文件;4:数据库类型:锁定整个数据库;5:页类型:锁定8K为单位的数据库页。 锁的分类还有一种分法,就是按用户和数据库对象来分: 1). 从数据库系统的角度来看:分为独占锁(即排它锁),共享锁和更新锁 1:共享 (S) :用于不更改或不更新数据的操作(只读操作),一般常见的例如select语句。 2:更新 (U) :用于可更新的资源中。防止当多个会话在读取、锁定以及随后可能进行的资源更新时发生常见形式的死锁。 3:排它 (X) :用于数据修改操作,例如 INSERT、UPDATE 或 DELETE。确保不会同时同一资源进行多重更新。 2). 从程序员的角度看:分为乐观锁和悲观锁。 1:乐观锁:完全依靠数据库来管理锁的工作。 2:悲观锁:程序员自己管理数据或对象上的锁处理。 一般程序员一看到什么锁之类,觉的特别复杂,对专业的DBA当然是入门级知识了。可喜的是程序员不用去设置,控制这些锁,SQLServer通过设置事务的隔离级别自动管理锁的设置和控制。锁管理器通过查询分析器分析待执行的sql语句,来判断语句将会访问哪些资源,进行什么操作,然后结合设定的隔离级别自动分配管理需要用到的锁。 2>:行版本控制:当启用了基于行版本控制的隔离级别时,数据库引擎 将维护修改的每一行的版本。应用程序可以指定事务使用行版本查看事务或查询开始时存在的数据,而不是使用锁保护所有读取。通过使用行版本控制,读取操作阻止其他事务的可能性将大大降低。也就是相当于针对所有的表在查询时都会加上nolock,同样会产生脏读的现象,但差别在于在一个统一管理的地方。说到了基于行版本控制的隔离级别,这里有必要说下隔离级别的概念。 隔离级别的用处:控制锁的应用,即什么场景应用什么样的锁机制。 最终目的:解决并发处理带来的种种问题。 隔离级别的分类: 1:未提交读,隔离事务的最低级别,只能保证不读取物理上损坏的数据; 2:已提交读,数据库引擎的默认级; 3:可重复读; 4:可序列化;隔离事务的最高级别,事务之间完全隔离。 小结:NOLOCK 语句执行时不发出共享锁,允许脏读 ,等于 READ UNCOMMITTED事务隔离级别 。nolock确实在查询时能提高速度,但它并不是没有缺点的,起码它会引起脏读。 nolock的使用场景(个人观点): 1:数据量特别大的表,牺牲数据安全性来提升性能是可以考虑的; 2:允许出现脏读现象的业务逻辑,反之一些数据完整性要求比较严格的场景就不合适了,像金融方面等。 3:数据不经常修改的表,这样会省于锁定表的时间来大大加快查询速度。 综上所述,如果在项目中的每个查询的表后面都加nolock,这种做法并不科学,起码特别费时间,不如行版本控制来的直接有效。而且会存在不可预期的技术问题。应该有选择性的挑选最适合的表来放弃共享锁的使用。 最后说下nolock和with(nolock)的几个小区别: 1:SQL05中的同义词,只支持with(nolock); 2:with(nolock)的写法非常容易再指定索引。 跨服务器查询语句时 不能用with (nolock) 只能用nolock 同一个服务器查询时 则with (nolock)和nolock都可以用 比如 SQL code select * from [IP].a.dbo.table1 with (nolock) 这样会提示用错误select * from a.dbo.table1 with (nolock) 这样就可以 转自:http://hi.baidu.com/gabriel/item/11f32132593557c31a96961a

龙生   15 Mar 2013
View Details

40例响应式Web设计

响应式Web设计是在开发和设计网站过程中产生的一种方式,它的目的是让内容布局能随用户使用显示器的不同而变化。再明确点说,这种设计概念,就是让原本1292像素宽,4栏的内容,能够很好地显示在1025像素宽的用户屏幕上,同时还能自动简化成2栏。当然,让它很好的适应智能手机和其他种类电脑的屏幕也就成了水到渠成的事了。这种特殊的设计形式就被成为“响应式Web设计”。 响应式Web设计与传统的设计方式截然不同,开发人员(特别是新手)必须要理解它的优势和弊端。这篇文章正是为大家揭示一些实例的。(这里介绍一个叫“Media Queries”的网站,里面介绍了更多实例和演示) 数据表格是响应式Web设计的经典使用情景,实现它的想法与传统的设计理念有很大不同。数据表格默认很宽,当你要查看它全貌时,你得缩小表格,但这时字会变 的很小,很难去阅读。然而当你想看清楚上面的字时,就不得不再把表格放大,这时要查看完整表格就得横滚加纵滚。这么阅读表格也太KB了。或许重新格式化表格或以饼图形式展现是种解决方案。再不然,你可以弄一个迷你图,即使在窄屏幕里它也能适应。 响应式Web设计中的图像以流式图像为主,可以被上下文感知的图像所替代,这是一种更好的设计方式。这种技术的真正意义在于,能够让图像适应不同的屏幕分辨率,更大的或更小的。所以它与传统设计的理念和技术都有很大不同,合理使用会让你的网页化腐朽为神奇。 Mountain Dew 访问网站 AXT 访问网站 Rbma Radio 访问网站 Lotta Nieminen 访问网站 Berger & Fohr 访问网站 Cropp 访问网站 Stink Digital 访问网站 Hair Project 访问网站 Atlanta Ballet 访问网站 Google Cultural Institute 访问网站 Build Windows 访问网站 Enochs 访问网站 From The Front 访问网站 Sweet Hat Club 访问网站 Oliver Russel 访问网站 United Pixelworkers 访问网站 dConstruct 2012 访问网站 Food Sense 访问网站 Andersson-Wise Architecture 访问网站 TeeGallery 访问网站 Lynn and Tonic 访问网站 8Faces 访问网站 Sleepstreet 访问网站 ConvergeSE 2012 访问网站 Iwantedrock 访问网站 Abberdein 访问网站 Inspire Conference 访问网站 Design Week Portland 访问网站 […]

龙生   12 Mar 2013
View Details

视觉陷阱

龙生   12 Mar 2013
View Details

Druapl7权威指南

第一部分 入门    第一章 ■■■ 建立一个drupal7站点 本杰明 梅兰肯 丹 哈基姆扎德 达妮 诺丁著 “好吧,我们能用艰难的方法完成这事,或者我们可以用Drupal的方法完成这事。”                                                                                                                                     弗莱斯特 玛斯(红茶菌) 本书通过介绍使用Drupal 7创建网站的所有各个方面的内容,将会使你在Drupal的学习中少走弯路:它将会涉及结构和配置,模块开发,前台开发,持续运行项目,以及贡献Drupal的代码,文档,还有社区等等。 在第一章中还有什么比创建一个完整的站点更好的方法开始呢?在27页中,你要每小时从零点走到60英里(或每小时100公里,视情况而定)。在后面的章节中,你要使用Views【视图】的动态页面添加涡轮增压器,主题化赛车的条纹;以及Jquery奖杯的获得者;你还要执行一些商业方面花哨的练习等等。 在整本书中,我们将设法引导你以Drupal的方法做事。从来就没有只有一种方法能达到目地,但是有些方法忽视乃至反对Drupal的产品。相比之 下,Drupal的方式在Drupal的优点基础上是任何方式无法相比的。(第8章讲述了其中的优点之--一个活跃的在课程中能够持续给你提供帮助的社 区。) 在本章中你要创建的这个站点会允许用户轻松地创建和分类内容。方案不是假设的。本书需要一个网站,而你正在创建它!你将要: […]

龙生   10 Mar 2013
View Details

Tengine

 Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。 从2011年12月开始,Tengine成为一个开源项目。现在,它由Tengine团队开发和维护。Tengine团队的核心成员来自于淘宝、搜狗等互联网企业。   继承Nginx-1.2.3 的所有特性,100%兼容Nginx的配置;动态模块加载(DSO)支持。加入一个模块不再需要重新编译整个Tengine;输入过滤器机制支持。通过使用这种机制Web应用防火墙的编写更为方便;动态脚本语言Lua支持。扩展功能非常高效简单;支持管道(pipe)和syslog(本地和远端)形式的日志以及日志抽样;组合多个CSS、JavaScript文件的访问请求变成一个请求;可以对后端的服务器进行主动健康检查,根据服务器状态自动上线下线;自动根据CPU数目设置进程个数和绑定CPU亲缘性;监控系统的负载和资源占用从而对系统进行保护;显示对运维人员更友好的出错信息,便于定位出错机器;更强大的防攻击(访问速度限制)模块;更方便的命令行参数,如列出编译的模块列表、支持的指令等;可 以根据访问文件类型设置过期时间;

龙生   09 Mar 2013
View Details

MySql Error Code: 2006 – MySQL 服务器已离线

用SQLYog进行数据导入的时候出错:MySql Error Code: 2006 – MySQL 服务器已离线 解决: 1.在mysql的配置文件最后添加:max_allowed_packet = 100M 2.如果还不行,就再添加以下两行: interactive_timeout=28800000 wait_timeout=28800000

龙生   09 Mar 2013
View Details

我发誓要写好软件,自己开公司。

我发誓要写好软件,自己开公司。

龙生   08 Mar 2013
View Details

Global中方法的说明

Application_Init:在每一个HttpApplication实例初始化的时候执行。 Application_Disposed:在每一个HttpApplication实例被销毁之前执行。 Application_Error:所有没有处理的错误都会导致这个方法的执行。 Application_Start:在程序初始化的时候执行。在Web应用程序的生命周期里就执行一次(自动的重新启动算另外一次生命周期),这里只能放一些公用的信息,比如HttpApplicationState。 Application_End:应用程序结束时,在最后一个HttpApplication销毁之后执行。对应Application_Start,在整个生命周期里面也是只执行一次。 执行顺序:Application_BeginRequest:BeginRequest是在收到Request时第一个触发的事件,这个方法自然就是第一个执行的了。 Application_AuthenticateRequest:当安全模块已经建立了当前用户的标识后执行。 Application_AuthorizeRequest:当安全模块已经验证了当前用户的授权时执行。 Application_ResolveRequestCache:当ASP.NET完成授权事件以使缓存模块从缓存中为请求提供服务时发生,从而跳过处理程序(页面或者是WebService)的执行。这样做可以改善网站的性能,这个事件还可以用来判断正文是不是从Cache中得到的。 Application_AcquireRequestState:当ASP.NET获取当前请求所关联的当前状态(如Session)时执行(真是拗口啊,msdn上就这样写的,我自己想不出什么好句子了)。 Application_PreRequestHandlerExecute:当ASP.Net即将把请求发送到处理程序对象(页面或者是WebService)之前执行。这个时候,Session就可以用了。 Application_PostRequestHandlerExecute:当处理程序对象(页面或者是WebService)工作完成之后执行。 Application_ReleaseRequestState:在ASP.NET执行完所有请求处理程序后执行。ReleaseRequestState事件将使当前状态数据被保存。 Application_UpdateRequestCache:在ASP.NET执行完处理程序后,为了后续的请求而更新响应缓存时执行。 Application_EndRequest:同上,EndRequest是在响应Request时最后一个触发的事件,这个方法自然就是最后一个执行的了。 另外两个: 这两个事件的顺序是无法确定的,按照MSDN的说法,它们随时都可能发生。 下面就按这个顺序来解释一下它们在Global.asax.cs中相应的事件处理方法的含义。 整理自:http://hi.baidu.com/czh8888/item/7371eea8ddcaaa9e151073df

龙生   08 Mar 2013
View Details

上班第二天,把gagamacth的功能浏览了一下,汗~

上班第三天,把gagamatch的功能粗略的看一遍,真汗啊,小问题太多了,用户体验就更不用说了。里面都是马甲会员,既然想做国际平台,就不要马甲嘛,要找对模式,而不是每个功能都要钱,这个受不了啊,伤不起。 技术就更不用说了,引用了十几个第三方的类库,那自己的代码在哪?就是用别人的类库和框架构建一切,这对于一个科技为主的公司可不行啊,没有核心技术怎么能行?! 其实中国的好多企业都是泊来品,没有核心技术,也谈不上核心竞争力。怎么发展进步呢? 太急功近利了,赚的永远都是小钱,更不会成功。

龙生   07 Mar 2013
View Details

C#使用ICSharpCode.SharpZipLib.dll压缩文件夹和文件

大家可以到http://www.icsharpcode.net/opensource/sharpziplib/ 下载SharpZiplib的最新版本,本文使用的版本为0.86.0.518,支持Zip, GZip, BZip2 和Tar格式,其实没啥好说的直接上代码

代码来自网络,略作修改,修改为静态方法,修改文件夹递归压缩时的bug.. 转自:http://www.cnblogs.com/xuanye/archive/2011/10/19/2217211.html

龙生   07 Mar 2013
View Details
1 364 365 366 408