zping

SQL SERVER,ORACLE数据库分析,设计,研究,优化,重构等

统计

常用链接

友情衔接

阅读排行榜

评论排行榜

置顶随笔 #

[置顶]浅谈系统优化设计--复杂运算放在逻辑层还是在数据库层?

摘要: 前段时间,我们去回访客户,看了今年上半年优化的一个系统,看看性能怎么样。去了以后,客户反映感觉还可以,不慢,就是说这段时间数据库服务器的CPU有时超过了90%,会持续一段比较长的时间,可能有几十分钟。 下午,就发现这时候数据库服务器的CPU一直在90%以上。通过sql server profile也没查出什么问题。觉得操作很正常,后来通过DMVs发现,执行我以前改写的几个存储过程,执行次数比较多,...阅读全文

posted @ 2008-11-18 21:54 zping 阅读(777) 评论(8) 编辑

[置顶]SQL 语句优化--中间表的使用优化

摘要: 上周五,公司的同事,从客户那边回来,说一个人员选择页面很慢,页面打开需要15s左右,后来自己也试了一下,也的确需要比较长的时间,客户反应比较强烈。 通过DMV查出缓慢的两个语句如下:语句一:[代码] 语句二:[代码] 查询的两个表的数据量: 表humres: 1920 行 ,191次IO 表orgunitlink:256 行, 11 次IO 最大表才不到2000行数据,查询为何如此慢。看看执...阅读全文

posted @ 2008-11-17 15:24 zping 阅读(889) 评论(2) 编辑

[置顶]SQL Server 2005 和JBOSS 4 系统运行缓慢--高并发系统探讨(1)

摘要: 今天下午,我们搭建了测试服务器,客户的两个管理人员,正在不停的添加数据,突然说页面打开错误,同时添加数据很慢,这时通过监控数据库服务器发现sql语句发现执行正常,但是客户的页面打不开。这时由于JBOSS服务器和数据库服务器都是放在一个服务器上,这时我看看内存和CPU,发现CPU占用100%,一般都在98%以上。这时很奇怪了,sql语句执行都比较快,为何内存占用98%居高不下,而且服务器还是中午重新...阅读全文

posted @ 2008-09-24 20:47 zping 阅读(2936) 评论(10) 编辑

[置顶]SQL 语句优化--OR 语句优化案例

摘要: 从上海来到温州,看了前几天监控的sql语句和数据变化,发现有一条语句的io次数很大,达到了150万次IO,而两个表的数据也就不到20万,为何有如此多的IO次数,下面是执行语句:[代码] 执行IO统计结果如下:[代码] 执行计划如下: 这里发现:主要是嵌套循环算法占的开销最大。个人感觉是“Or”引起的性能问题,后来根据业务逻辑改写。如下: 语句修改如下: [代码] 查询IO...阅读全文

posted @ 2008-09-23 16:53 zping 阅读(4089) 评论(27) 编辑

[置顶]SQL 语句优化--IN语句优化案例

摘要: 今天客户系统升级,通过DMVs性能分析查了一下,升级后发现一个语句执行时间比较长,执行语句要好几秒钟,调出语句如下:[代码] 后来看了一下,这几表的数据[代码] 发现这三张表都没有超过1千行数据,建立索引意义不大,为何如此慢,看看执行计划: 分析:发现是表dbo.uft3a6h61176948132312访问开销最大,但表中数据不到一千行。执行看看结果:[代码] 这里发现表uft3a6h6117...阅读全文

posted @ 2008-09-15 20:15 zping 阅读(6111) 评论(19) 编辑

[置顶]SQL server 系统优化--通过执行计划优化索引(1)

摘要: 前几天,远离上海,到了温州,在客户的这边处理系统慢,该系统每天正常down机7次左右,在线人员一多,系统运行缓慢,严重影响业务操作,到了无法忍耐的地步,这几天一直在这边处理优化中的问题和升级系统。将这些优化办法和思路记录下来,给大家在以后优化系统中提供思考和建议。 这几天都在通过执行计划来优化索引: 1,首先通过DMVs性能视图来查看那些性能问题是可以通过索引来优化的。先在生产数据库里执行下列查询...阅读全文

posted @ 2008-09-11 15:51 zping 阅读(3045) 评论(12) 编辑

[置顶]Sql Server 2005 实现Oracle 10g的range--list/range等组合分区功能

摘要: Sql Server 2005有分区功能,但Oracle已经有了组合分区功能,sql server 2005如何实现,能实现吗?在Oracle 10g中,有rang-list/hash分区,在SQL server 2005中可以实现Range和list,可以和oracle一样实现复合分区。 在上一次优化中,客户使用的是SQL server 2005的标准版,由于标准版没有提供分区功能,后来使用了分...阅读全文

posted @ 2008-09-08 16:32 zping 阅读(1431) 评论(0) 编辑

[置顶]数据库优化---空间换时间优化

摘要: 在查询优化中,有一个重要的概念:空间换取查询时间这一理论最好的应用就是:数据仓库(OLAP):在海量数据库里(一般是TB级)分析数据,通过对数据的ETL和计算汇总,得到有用的数据,并通过不同维度查看统计数据(一般比较少),实现上钻和下钻分析数据。 现在讨论一下在OLTP系统中空间换取查询时间常用的几个方法: 1,增加冗余表(计算汇总表) 2,增加冗余字段(包括计算字段) 3, 增加索引(包括计算索...阅读全文

posted @ 2008-09-04 17:38 zping 阅读(2785) 评论(9) 编辑

[置顶]SQL Server 死锁处理和优化心得

摘要: 前段时间提到的"SQL Server 2005 死锁解决探索",死锁严重,平均每天会发生一次死锁,在解决和处理SQL server2005死锁中查了很多资料和想了很多办法, 对为何出现死锁和怎样较少死锁有了进一步认识,在这里和大家一起分享: SQL Server 锁类型 在数据库中主要存在两种锁: S(共享锁)和X(排他锁) S(共享锁):在执行查询数据时,SQL server会将行锁定,这时只能...阅读全文

posted @ 2008-08-29 17:37 zping 阅读(530) 评论(0) 编辑

[置顶]数据库系统优化--业务逻辑设计优化

摘要: 当我们优化一个系统时,有时发现一种情况就是自己修改SQL,索引以及分区是不能解决性能问题的。这时你要考虑业务逻辑优化和表设计的重构。这两点的确和设计结合的很紧密。 业务逻辑优化 结合实际,我们先谈谈业务逻辑优化。 案例一:我们的系统一个文档模块,客户点击时很慢,通过性能分析,是点击是去查询数据库,这时系统是通过Hibernate来两步处理: 1,计算该类型的文档数量总数。 2,显示最新文档的前20...阅读全文

posted @ 2008-08-25 13:36 zping 阅读(2545) 评论(9) 编辑

[置顶]SQL 大数据量的优化例子讨论

摘要: 今天在itput上看了一篇文章,是讨论一个语句的优化: 原贴地址: http://www.itpub.net/viewthread.php?tid=1015964&extra=&page=1 一,发现问题 优化的语句: [代码] 以上就是优化的需要优化的语句和情况。 不少人在后面跟帖:有的说没办法优化,有的说将IN该为EXISTS,有的说在ip上建立索引复合索引(ip,name)等...阅读全文

posted @ 2008-08-13 19:22 zping 阅读(6027) 评论(26) 编辑

[置顶]SQL Server 2005 hash联接算法

摘要: 这是SQL Server 2005里的介绍:如果两个联接输入都很大,而且这两个输入的大小差不多,则预先排序的合并联接提供的性能与哈希联接相近。但是,如果这两个输入的大小相差很大,则哈希联接操作通常快得多。 哈希联接可以有效处理未排序的大型非索引输入。它们对复杂查询的中间结果很有用,因为: ·中间结果未经索引(除非已经显式保存到磁盘上然后创建索引),而且通常不为查询计划中的下一个操作进行适...阅读全文

posted @ 2008-08-11 21:38 zping 阅读(1881) 评论(3) 编辑

[置顶]Sql Server 2005 合并联接算法

摘要: 简介:如果两个联接输入并不小但已在二者联接列上排序(例如,如果它们是通过扫描已排序的索引获得的),则合并联接是最快的联接操作。如果两个联接输入都很大,而且这两个输入的大小差不多,则预先排序的合并联接提供的性能与哈希联接相近。从上次我们分析来看,嵌套循环适合输入和输出都小的情况,那如果输入和输入都比较大情况下,使用合并算法什么情况下最优。最佳使用:合并联接本身的速度很快,但如果需要排序操作,选择合并...阅读全文

posted @ 2008-08-10 17:27 zping 阅读(1166) 评论(0) 编辑

[置顶]Sql Server 2005 嵌套循环算法

摘要: 前段时间看了一篇关于算法的blog,地址如下: http://www.cnblogs.com/perfectdesign/archive/2008/04/24/sql_tuning.html 不少人也给了解决方法,以前也研究过(嵌套,合并,hash)算法,但没有真正的用到优化中,这个例子给了我很大启示。 现在就讨论一下这三个算法的使用。 嵌套循环:算法:for each row R1 in the...阅读全文

posted @ 2008-08-10 17:20 zping 阅读(2882) 评论(6) 编辑

[置顶]SQL优化--使用 EXISTS 代替 IN 和 inner join来选择正确的执行计划

摘要: 在使用Exists时,如果能正确使用,有时会提高查询速度: 1,使用Exists代替inner join 2,使用Exists代替 in 1,使用Exists代替inner join例子: 在一般写sql语句时通常会遇到如下语句: 两个表连接时,取一个表的数据,一般的写法通过关联查询(inner join): [代码]查询结果:[代码] 还有一种写法使用exists来取数据[代码]执行结果: [代...阅读全文

posted @ 2008-08-05 20:52 zping 阅读(7704) 评论(35) 编辑

[置顶]Sql Server 2005 实现Oracle 10g 的hash表分区功能

摘要: 最近学习Oracle中,在其有hash表分区功能,就在想sql server 有类似分区吗,查了一些资料,发现没有介绍,在2005中目前只支持列表和范围分区。 以前只知道Sql Server有hash索引,本文就在Sql Server中实现Oracle里的hash表分区。在oracle 10g的hash分区保持分区数据的均匀,分的区个数是2的倍数分区才可以实现。前段时间做了一个试验,实现了在sql...阅读全文

posted @ 2008-07-27 20:28 zping 阅读(1690) 评论(4) 编辑

2012年1月12日 #

2011年2月--2011年7月数据库性能优化过程

摘要: 开始暴露问题 2011年2月下旬的一天早上,昨天更新的系统,早上发现数据库的服务器CPU达到100%,而且持续的时间很长,不得回到昨天更新前的版本,但系统还是有较长时间达到100%的情况,问题没有解决,从这正式开始优化线上数据库性能。第一阶段优化 分析问题: 一开始老是想找出问题的原因,找了3天还没有头绪,列出以下原因: 1,JOB的耗时存储过程 --太频繁,执行时间长,1,2分钟 2,频繁执行同样的SQL --如查询用户表sys_user 几分钟内执行数千次 3,tempdb太小 4,运行SQL太慢 5,数据库阻塞 但这些原因,都找不出具体的在那块有问题,好像都有,又好像都没有,时间在一天.阅读全文

posted @ 2012-01-12 16:45 zping 阅读(26) 评论(0) 编辑

2012年1月11日 #

SQL 2008 配置镜像执行SQL

摘要: 主机执行: USEmaster;CREATEMASTERKEYENCRYPTIONBYPASSWORD='ics2012';CREATECERTIFICATEHOST_A_certWITHSUBJECT='HOST_Acertificate',EXPIRY_DATE='01/01/2050';CREATEENDPOINTEndpoint_MirroringSTATE=STARTEDASTCP(LISTENER_PORT=5022,LISTENER_IP=ALL)FORDATABASE_MIRRORING(AUTHENTICATION=CERTIF阅读全文

posted @ 2012-01-11 16:06 zping 阅读(18) 评论(0) 编辑

2011年12月5日 #

处理“远程主机强迫关闭了一个现有的连接”

摘要: 最近,数据库系统经常出现“ 消息[298] SQLServer Error: 10054, TCP Provider: 远程主机强迫关闭了一个现有的连接。 [SQLSTATE 08S01]” 一开始很迷惑,不知道原因,后来查询资料,发现max worker thread设置问题,由于前期max worker thread设置为255,连接过小,修改成0阅读全文

posted @ 2011-12-05 16:29 zping 阅读(85) 评论(0) 编辑

2011年11月11日 #

批量导出表索引

摘要: 批量导出索引: SELECT'CREATEINDEX'+[name]+'ON['+OBJECT_NAME(object_id)+']('+REVERSE(SUBSTRING(REVERSE((SELECTname+CASEWHENsc.is_descending_key=1THEN'DESC'ELSE'ASC'END+','FROMsys.index_columnsscJOINsys.columnscONsc.object_id=c.object_idANDsc.column_id=c.column阅读全文

posted @ 2011-11-11 16:03 zping 阅读(61) 评论(0) 编辑

2011年11月4日 #

SQL Server 2008 网络备份数据库

摘要: 一台SQL Server的磁盘空间不够备份,想做日志传送,无法实现,在网上找了一个方法 原文URL: http://blog.sina.com.cn/s/blog_4c8f1ac20100rz7z.html sp_configure'showadvancedoptions',1;GORECONFIGURE;GOsp_configure'xp_cmdshell',1;GORECONFIGURE;GOsp_configure'showadvancedoptions',0;GORECONFIGURE;GOexecmaster..xp_cmdshell&阅读全文

posted @ 2011-11-04 14:03 zping 阅读(64) 评论(0) 编辑

2011年10月12日 #

SQL Server 监控锁定信息

摘要: 查看当前数据库锁定信息: declare@tbaTABLE(spidint,dbidINT,objectidINT,indldINT,TYPEVARCHAR(20),resourceVARCHAR(50),modeVARCHAR(20),statusVARCHAR(10))insertinto@tbaexecsp_lockselectspid,OBJECT_name(objectid)tab,TYPE,resource,mode,statusfrom@tbaWHEREdbid=DB_ID()andOBJECT_name(objectid)<>''ORDERBY2阅读全文

posted @ 2011-10-12 14:27 zping 阅读(81) 评论(0) 编辑

2011年9月19日 #

下车扫描五次优化全过程

摘要: 下车扫描,业务部门一直反应慢,不稳定,程序不是报黄页就是运行慢,严重影响师傅使用,估计师傅心里一直"很想我们"。 第一次优化 和同事一起看了程序业务逻辑,觉得应该将整个扫描逻辑过程放到存储过程,一可以避免程序在交互中的影响,二可以提高性能。 修改完后,由于需要读取Sequence,在存储过程中需要运行下列命令来获取:SELECT @DeliveryItemStatusSysNo= dbo.CreateSequence('DeliveryItem_Status_Sequence',1,'192.168.2.8',6060) 第二次优化 扫描过程阅读全文

posted @ 2011-09-19 18:56 zping 阅读(126) 评论(0) 编辑

2011年9月7日 #

清理大批量数据例子

摘要: 最近有一个新任务,在一个表里一下更新700W条数据。由于这个表业务正在使用,而且SQL Server做了完整日志记录。 修改了一下更新sql,分批更新,每次60W。 DECLARE@numINTSET@num=0WHILE@num<7000000BEGINUPDATEtSETUseCustomerSysNo=c.sysno,ValidTimeFrom='2011-09-07',rowmodifydate=GETDATE(),ValidTimeTo='2011-09-1223:59:59.000'FROM(SELECTValidTimeTo,rowmodif阅读全文

posted @ 2011-09-07 16:18 zping 阅读(262) 评论(1) 编辑

一条诡异的SQL

摘要: 上周五,在2.4数据库上执行一条简单的sql查不出数据,SQL如下:select * from Product_ID where POSysNo in(188060,185624) and SysNo not in(select productidsysno from SO_Item_PO)执行:select * from Product_ID where POSysNo in(188060,185624)查出一个SysNo=26293588在select productidsysno from SO_Item_PO where productidsysno=26293588,执行在SO_It阅读全文

posted @ 2011-09-07 15:55 zping 阅读(119) 评论(1) 编辑

2011年7月6日 #

查询表的使用空间和可用空间

摘要: 查询表的使用空间和可用空间 setnocountonexecsp_MSForEachTable@precommand=N'createtable##(idintidentity,表名sysname,字段数int,记录数int,保留空间varchar(20),使用空间varchar(20),索引使用空间varchar(20),未用空间varchar(20))',@command1=N'insert##(表名,记录数,保留空间,使用空间,索引使用空间,未用空间)execsp_spaceused''?''update##set字段数=(sele阅读全文

posted @ 2011-07-06 16:38 zping 阅读(122) 评论(0) 编辑

2011年6月23日 #

SQL 语句技巧--单列数据变多行数据

摘要: 碰到一个需求,将一个列的数据“122,123,145” ,变成多行,表值函数如下:CreateFUNCTIONtransformColS(@idvarchar(1000))RETURNS@stTABLE(idint)begindeclare@strasvarchar(1000)set@str=@iddeclare@strVasvarchar(1000)declare@numintset@num=(len(@str)-len(replace(@str,',','')))/len(',') --计算@str中有多少个“,”,用于循环while(@nu阅读全文

posted @ 2011-06-23 14:36 zping 阅读(172) 评论(0) 编辑

2011年6月9日 #

SQL2008镜像,清理log日志

摘要: 在做SQL 2008镜像,由于主服务器必须做完整备份,这时log日志很大,必须定期清理log日志,将下列存储过程没6个小时执行一次,其定期会将日志文件缩小到300M CreatePROC[dbo].[CleanTranLog]ASBEGINDECLARE@numTINYINT--执行次数DECLARE@backLogNameVARCHAR(100);--备份日志文件名称DECLARE@backLogPathVARCHAR(100);--备份日志文件的路径SET@num=0;SET@backLogPath=N'C:\SQLBackup';--设定备份日志的路径--备份3次镜像日志阅读全文

posted @ 2011-06-09 16:31 zping 阅读(233) 评论(0) 编辑

2011年4月13日 #

如何修改SQL Server 2005服务器名称(转)

摘要: 1、使用SELECT @@ServerName可以看到当前数据库的服务器名2、SELECT * FROM Sys.SysServers表中可以看到当前的所有服务器名3、使用sp_dropserver ’原实例名’ 将这个实例名删除4、使用sp_addserver ’新实例名’,’LOCAL’ 将本地服务器重新添加到服务器列表中5、查询SysServers表,可以看到已经修改6、重启数据库服务,修改完成,可以正常使用复制功能了阅读全文

posted @ 2011-04-13 10:21 zping 阅读(298) 评论(0) 编辑

2011年3月31日 #

查询长事务和SQL执行等待间隔时间

摘要: 通过SQL Profile跟踪SQL,并将跟踪的sql存入表中,运行下列语句就可以获取长事务的id,在EXCEL中通过TransactionID 筛选就可以得到事务的sql和运行时间。selectTransactionID[事务编号],count(*)[SQL条数],datediff(second,min(StartTime),max(EndTime))[事务时间S]fromyywhereTransactionIDisnotnullgroupbyTransactionIDorderby3 SQL执行等待间隔时间SELECTt.TransactionID事务ID,DATEDIFF(s,t.En.阅读全文

posted @ 2011-03-31 15:37 zping 阅读(182) 评论(0) 编辑

2011年2月24日 #

查询SQL Server存储过程的执行信息

摘要: View Code createVIEWview_job_infoasSELECTb.[name][Job名称],CASEWHENb.enabled=1THEN'启用'ELSE'禁用'END[是否启用],a.step_name[步骤名称],a.commandFROMmsdb.dbo.sysjobstepsaINNERJOINmsdb.dbo.sysjobsbONa.job_id=b.job_idSELECTb.*,OBJECT_NAME(object_id,database_id)存储过程名,d.cached_time编译时间,d.last_execution_阅读全文

posted @ 2011-02-24 17:48 zping 阅读(179) 评论(0) 编辑