??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品四虎,亚洲一区二区三区四区视频,四季av在线一区二区三区http://www.aygfsteel.com/shanben/category/32687.html年强则中国?年q步则中国进?zh-cnThu, 04 Sep 2008 08:16:32 GMTThu, 04 Sep 2008 08:16:32 GMT60Sybase ASE表分區的?http://www.aygfsteel.com/shanben/archive/2008/09/04/226863.html虎啸长沙,龙跃深圳.虎啸长沙,龙跃深圳.Thu, 04 Sep 2008 02:52:00 GMThttp://www.aygfsteel.com/shanben/archive/2008/09/04/226863.htmlhttp://www.aygfsteel.com/shanben/comments/226863.htmlhttp://www.aygfsteel.com/shanben/archive/2008/09/04/226863.html#Feedback0http://www.aygfsteel.com/shanben/comments/commentRss/226863.htmlhttp://www.aygfsteel.com/shanben/services/trackbacks/226863.html
Sybase ASE表分區的?

表分區是目前各L數據庫都提供的常用技術,各大數據庫基g同的體系i構提供了各L色的實現Q如果能合理使用這種技術,為pȝ性能的提升帶來意想不到的效果Q本文以Sybase ASE數據庫為例來說明這種技術的使用Ҏ?


在Sybase ASE中,未分區的不帶聚烦引的表有一個雙向的數據庫頁鏈鏈接。在插入數據行時Q將查找並鎖定頁鏈的最後一頁,如果最後一頁空間用盡,Sybase ASE分配新的一頁,如果表進行大量ȝ的數據插入,引起對最後一頁鎖資源的競爭,如果一個事務(TransactionQ正在用最後一頁的排它鎖,那麼其他向同一張表插入數據的事務必須等待,直到該事務結束釋放資源,解除排它鎖?


Sybase ASE?1.5開始提供新的Ҏ表分區。表分區產生附加的頁鏈Q每個頁鏈有自己的最後一頁,這樣插入操作可以獲得多個最後一頁,實現並發操作Q從而提高數據n插入性能。若包含表的D分佈在多個物理設備上Q表分區通過降低服務器從高速m存向盤進行數據h的I/O衝突而提高數據插入性能。對ȝ地追加數據到表中或進行大塊數據的拷入、拷出操作,採用表分區技術,能極大地提升系i性能?


劃分表分區的操作步驟如下:


1. 在同一數據庫設備上劃分表分區?先創Q再用alter table ?partition 語句劃分表分區?


create table opt_plnexrcd ( per_date datetime, per_sndstn char(4), ... )


alter table opt_plnexrcd partition 5


2. 在多個數據na備上劃分表分區時,先徏一個數據nD在多個數據n上,然後再將表徏在該D上Q最後對表分區?


sp_addsegment seg1, oil, oil_data1


sp_extendsement seg1, oil, oil_data2


...


sp_extendsement seg1, oil, oil_data5


create table opt_plnexrcd ( per_date datetime, per_sndstn char(4), ... ) on seg1


或徏完表後執行sp_placeobject:


sp_placeobject seg1, opt_plnexrcd


最後對表分區:


alter table opt_plnexrcd partition 5


如果表分?個分區Q表所在的D又分跨5個數據na備Q那麼每個分區分別映到該段所在的5個數據na備上。一般劃分表分區的原則是Q表分區數等於或大於表所在段分跨的數據na備數。但要注意有些表不能分區Q它們是pȝ表、正在用的表、臨時表和有聚簇索引的表?


Sybase ASE使用保存在分區控制頁上的箔a數據,來評測基於分區的並行掃瞄方式,以挑選最優執行計劃。如果表中數據在多個分區上是分佈均衡的,表分區ip數據是精的Q那麼掃瞄效率就比較高,並行處理有很好的性能Q所以表分區的維護對g行查詢處理十分重要。Sybase ASE的異常停止和某些情況下的事務回退都可能造成分區ip數據不精,Sybase ASE提供了兩個系i函數data_pgs和ptn_data_pgs,用它們可分別a算數據頁面敔R。如果兩者不相同Q說明分區ip不精,需要維PSybase ASE 提供如下命o來更新分區和頁面箔a數據:


1.更新每個分區的頁面箔a數據:


update partition statistics


2.更新表上索引的分佈頁面,同時更新各個表分區的控刉面的ip數據Q?


update all statistics table_name


3.示表分區的當前信息:


sp_helpartition


如果分區的表進行了大量的插入、更新和刪除後,數據有可能分佈不均勻Q用BCP加載大量數據後,也可能會出現數據分佈不均勻,此外一些其他原因也可能致數據分佈不均勅R^衡分區數據有兩E方法:一是對有數據的表徏聚簇索引Q二是用並行塊拯Q指定數據加載到某個分區的方法,Sybase ASE 新的BCP允許用戶指定分區Q把數據加載到指定的分區中?

虎啸长沙,龙跃深圳. 2008-09-04 10:52 发表评论
]]>
利用DM水^分区优化pȝhttp://www.aygfsteel.com/shanben/archive/2008/09/02/226451.html虎啸长沙,龙跃深圳.虎啸长沙,龙跃深圳.Tue, 02 Sep 2008 09:38:00 GMThttp://www.aygfsteel.com/shanben/archive/2008/09/02/226451.htmlhttp://www.aygfsteel.com/shanben/comments/226451.htmlhttp://www.aygfsteel.com/shanben/archive/2008/09/02/226451.html#Feedback0http://www.aygfsteel.com/shanben/comments/commentRss/226451.htmlhttp://www.aygfsteel.com/shanben/services/trackbacks/226451.html  实现水^分区以后Q可以达C下目的:

  1. 增强可用性:如果表的某个分区出现故障Q表在其他分区的数据仍然可用;

  2. l护方便Q如果表的某个分区出现故障,需要修复数据,只修复该分区卛_;

  3. 均衡I/OQ可以把不同的分区映到盘以^衡I/OQ改善整个系l性能;

  4. 改善查询性能Q对分区对象的查询可以仅搜烦自己兛_的分区,提高索速度?/p>

  DM数据库提供对表的分区Ҏ有两U:

  1、范围分区:范围分区是对表中的某个值的范围q行分区Q根据某个值的范围Q决定将该数据存储在哪个分区上?/p>

  2、HASH分区QHASH分区是通过指定分区~号来均匀分布数据的一U分区类型,因ؓ通过在I/O讑֤上进行散列分区,使得q些分区大小一致?/p>

  除了对表q行分区Q还可以对烦引进行分区。DM支持下面三种cd的分区烦引:

  1、本地烦引:其分区方式与其所在基表的分区方式一模一L索引。本地烦引的每个分区仅对应于其所在基表的一个分区?/p>

  2、全局分区索引Q用不同于其所在表的分区键q行分区的烦引,其所在表可以是分或非分区表?/p>

  3、全局非分区烦引:全局非分区烦引基本上和非分区表的索引一栗烦引结构是不分区的?/p>

  1.1 水^分区表的创徏

  在介l水q_的创Z前。先要了解分区键的概c?/p>

  分区键:分区键是分区表的某一列,它决定了分区表中每一行数据划分到哪个分区。该列的数据cd为DM常用数据cdQ不支持BLOB、TEXT、ROWID、BIT、BINARY、VARBINARY、时间间隔等cd和用戯定义cd。分区键不可以删除或修改?/p>

  范围分区通过LEFT或RIGHT关键字来指定每个值是W一个分区的上边?(LEFT) q是W二个分区的下边?(RIGHT)。边界g要求是递增的序列,但是不能重复Q边界g可以为NULLQ支持用常量表辑ּ或返回常量值的函数来指定分区的边界倹{?/p>

  如:建立范围分区表CREATE TABLE TAB1(C1 INT, C2 INT, C3 VARCHAR(100)) PARTITION BY RANGE (C1) LEFT FOR VALUES (1, 100, 10000);

  PARTITION NO1234

  VALUESVAL<=11

  建立HASH分区表CREATE TABLE TAB2(C1 INT, C2 INT, C3 VARCHAR(100)) PARTITION BY HASH(C1) PARTITIONS 3; TAB2以C1为分区键Q且分区Cؓ3?/p>

  范围区间或HASH分区数目不能过64个。不同的分区可以指定C同的文gl。?

  1.2 分区索引的创?/strong>

  本地索引、全局非分区烦引、全局分区索引可以建立在范围分或HASH分区表上Q普通表上可以徏立全局分区索引?/p>

  如:CREATE TABLE T(C1 INT, C2 INT, C3 VARCHAR(100)) PARTITION BY RANGE(C1) LEFT FOR VALUES(1, 100);

  CREATE INDEX T_IND1 ON T (C2); -- 本地索引Q系l将自动创徏3个分区子索引Q这些分区子索引按照C1q行分区?/p>

  CREATE NOT PARTIAL INDEX T_IND2 ON T (C2); -- 全局非分区烦引,索引不分区?/p>

  CREATE INDEX T_IND3 ON T (C2) PARTITION BY RANGE(C2) LEFT FOR VALUES(5, 55); -- 全局分区索引Q烦引按照C2列分?/p>

  1.3 水^分区表和分区索引的维?/strong>

  DM支持对范围分和范围分上的索引q行合ƈ和拆分。HASH分区表和HASH分区表上的烦引不支持合ƈ和拆分,本地分区索引不允许合q和拆分?/p>

  分区合ƈ通过指定分区号将盔R的两个分区合q成一个分区。MERGE分区Ӟ盔R的两个分区可以是相同的文件组Q也可以是不同的文gl?/p>

  分区拆分通过指定帔R表达式值将某一个分区拆分成两个分区Q指定的帔R表达式g能是原有的分围倹{SPLIT分区Ӟ可以指定新的文gl,或者不指定文gl?/p>

  1.4 水^分区的?/strong>

  水^分区表、分区烦引的使用和普通表、普通烦引的使用一栗用户通过SQL语句建立范围分区和HASH分区表,以及水^分区索引以后Q普通的INSERT、DELETE、UPDATE、SELECT语句的用不受Q何媄响?/p>

  分区拆分或合q以后,普通的INSERT、DELETE、UPDATE、SELECT语句的用不受Q何媄响?/p>

]]>
sybase数据库存储过E编写经验以及方?/title><link>http://www.aygfsteel.com/shanben/archive/2008/09/02/226399.html</link><dc:creator>虎啸长沙,龙跃深圳.</dc:creator><author>虎啸长沙,龙跃深圳.</author><pubDate>Tue, 02 Sep 2008 07:35:00 GMT</pubDate><guid>http://www.aygfsteel.com/shanben/archive/2008/09/02/226399.html</guid><wfw:comment>http://www.aygfsteel.com/shanben/comments/226399.html</wfw:comment><comments>http://www.aygfsteel.com/shanben/archive/2008/09/02/226399.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/shanben/comments/commentRss/226399.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/shanben/services/trackbacks/226399.html</trackback:ping><description><![CDATA[<p style="text-indent: 2em"><strong>一、前a</strong>Q在l过一D|间的存储q程开发之后,写下了一些开发时候的结和经验与大家׃nQ希望对大家有益Q主要是针对Sybase和SQL Server数据库,但其它数据库应该有一些共性? <p style="text-indent: 2em"> <p style="text-indent: 2em"><strong>二、适合读者对?/strong>Q数据库开发程序员Q数据库的数据量很多Q涉及到对SPQ存储过E)的优化的目开发h员,Ҏ据库有浓厚兴的人? <p style="text-indent: 2em"> <p style="text-indent: 2em"><strong>三、介l?/strong>Q在数据库的开发过E中Q经怼遇到复杂的业务逻辑和对数据库的操作Q这个时候就会用SP来封装数据库操作。如果项目的SP较多Q书写又没有一定的规范Q将会媄响以后的pȝl护困难和大SP逻辑的难以理解,另外如果数据库的数据量大或者项目对SP的性能要求很,׃遇到优化的问题,否则速度有可能很慢,l过亲nl验Q一个经q优化过的SP要比一个性能差的SP的效率甚至高几百倍? <p style="text-indent: 2em"> <p style="text-indent: 2em"><strong>四、内?/strong>Q? <p style="text-indent: 2em"> <p style="text-indent: 2em">1、开发h员如果用到其他库的Table或ViewQ务必在当前库中建立View来实现跨库操作,最好不要直接?#8220;databse.dbo.table_name”Q因为sp_depends不能昄SP所使用的跨库table或viewQ不方便校验? <p style="text-indent: 2em"> <p style="text-indent: 2em">2、开发h员在提交SP前,必须已经使用set showplan on分析q查询计划,做过自n的查询优化检查? <p style="text-indent: 2em"> <p style="text-indent: 2em">3、高E序q行效率Q优化应用程序,在SP~写q程中应该注意以下几点: <p style="text-indent: 2em"> <p style="text-indent: 2em">a)SQL的用规范: <p style="text-indent: 2em"> <p style="text-indent: 2em">i.量避免大事务操作,慎用holdlock子句Q提高系lƈ发能力? <p style="text-indent: 2em"> <p style="text-indent: 2em">ii.量避免反复讉K同一张或几张表,其是数据量较大的表Q可以考虑先根据条件提取数据到临时表中Q然后再做连接? <p style="text-indent: 2em"> <p style="text-indent: 2em">iii.量避免使用游标Q因为游标的效率较差Q如果游标操作的数据过1万行Q那么就应该改写Q如果用了游标Q就要尽量避免在游标循环中再q行表连接的操作? <p style="text-indent: 2em"> <p style="text-indent: 2em">iv.注意where字句写法Q必考虑语句序Q应该根据烦引顺序、范围大来定条g子句的前后顺序,可能的让字D顺序与索引序怸_范围从大到小? <p style="text-indent: 2em"> <p style="text-indent: 2em">v.不要在where子句中的“=”左边q行函数、算术运或其他表达式运,否则pȝ可能无法正用烦引?vi.量使用exists代替select count(1)来判断是否存在记录,count函数只有在统计表中所有行数时使用Q而且count(1)比count(*)更有效率? <p style="text-indent: 2em"> <p style="text-indent: 2em">vii.量使用“>=”Q不要?#8220;>”? <p style="text-indent: 2em"> <p style="text-indent: 2em">viii.注意一些or子句和union子句之间的替? <p style="text-indent: 2em"> <p style="text-indent: 2em">ix.注意表之间连接的数据cdQ避免不同类型数据之间的q接? <p style="text-indent: 2em"> <p style="text-indent: 2em">x.注意存储q程中参数和数据cd的关pR? <p style="text-indent: 2em"> <p style="text-indent: 2em">xi.注意insert、update操作的数据量Q防止与其他应用冲突。如果数据量过200个数据页面(400kQ,那么pȝ会q行锁升U,锁会升成表U锁? <p style="text-indent: 2em"> <p style="text-indent: 2em">b)索引的用规范: <p style="text-indent: 2em"> <p style="text-indent: 2em">i.索引的创与应用结合考虑Q徏议大的OLTP表不要超q?个烦引? <p style="text-indent: 2em"> <p style="text-indent: 2em">ii.可能的使用索引字段作ؓ查询条gQ尤其是聚簇索引Q必要时可以通过index index_name来强制指定烦? <p style="text-indent: 2em">iii.避免对大表查询时q行table scanQ必要时考虑新徏索引?iv.在用烦引字D作为条件时Q如果该索引是联合烦引,那么必须使用到该索引中的W一个字D作为条件时才能保证pȝ使用该烦引,否则该烦引将不会被用?v.要注意烦引的l护Q周期性重建烦引,重新~译存储q程? <p style="text-indent: 2em"> <p style="text-indent: 2em">c)tempdb的用规范: <p style="text-indent: 2em"> <p style="text-indent: 2em">i.量避免使用distinct、order by、group by、having、join、cumputeQ因些语句会加重tempdb的负担? <p style="text-indent: 2em"> <p style="text-indent: 2em">ii.避免频繁创徏和删除时表Q减系l表资源的消耗? <p style="text-indent: 2em"> <p style="text-indent: 2em">iii.在新Z时表Ӟ如果一ơ性插入数据量很大Q那么可以用select into代替create tableQ避免logQ提高速度Q如果数据量不大Qؓ了缓和系l表的资源,先create tableQ然后insert? <p style="text-indent: 2em"> <p style="text-indent: 2em">iv.如果临时表的数据量较大,需要徏立烦引,那么应该创Z时表和徏立烦引的q程攑֜单独一个子存储q程中,q样才能保证pȝ能够很好的用到该时表的烦引? <p style="text-indent: 2em"> <p style="text-indent: 2em">v.如果使用C临时表,在存储过E的最后务必将所有的临时表显式删除,先truncate tableQ然后drop tableQ这样可以避免系l表的较长时间锁定? <p style="text-indent: 2em"> <p style="text-indent: 2em">vi.慎用大的临时表与其他大表的连接查询和修改Q减低系l表负担Q因U操作会在一条语句中多次使用tempdb的系l表? <p style="text-indent: 2em"> <p style="text-indent: 2em">d)合理的算法用: <p style="text-indent: 2em"> <p style="text-indent: 2em">Ҏ上面已提到的SQL优化技术和ASE Tuning手册中的SQL优化内容,l合实际应用,采用多种法q行比较,以获得消耗资源最、效率最高的Ҏ? <p style="text-indent: 2em">具体可用ASE调优命oQset statistics io on, set statistics time on , set showplan on {?</p> <img src ="http://www.aygfsteel.com/shanben/aggbug/226399.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/shanben/" target="_blank">虎啸长沙,龙跃深圳.</a> 2008-09-02 15:35 <a href="http://www.aygfsteel.com/shanben/archive/2008/09/02/226399.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Sybase數據庫性能調優的一些小斚whttp://www.aygfsteel.com/shanben/archive/2008/09/02/226397.html虎啸长沙,龙跃深圳.虎啸长沙,龙跃深圳.Tue, 02 Sep 2008 07:29:00 GMThttp://www.aygfsteel.com/shanben/archive/2008/09/02/226397.htmlhttp://www.aygfsteel.com/shanben/comments/226397.htmlhttp://www.aygfsteel.com/shanben/archive/2008/09/02/226397.html#Feedback0http://www.aygfsteel.com/shanben/comments/commentRss/226397.htmlhttp://www.aygfsteel.com/shanben/services/trackbacks/226397.html         數據庫性能一般用兩個方面的指標來衡量:響應時間和吞吐量。響應越快,吞吐量越大,數據庫性能好。響應時間和吞吐量有些情況下不能一起得到改善?br />
1Q? 調優級別
Sybase數據庫性能調優Q可以從四個方面進行Q?br /> 一)        操作pȝ級:網i性能、操作系i參數、硬件性能{作攚wӀ?br /> ?        SQL Server級:調整存取ҎQ改善內存管理和鎖管理等?br /> ?        數據庫設a級Q採用降式a計Q合理設a烦引,分佈存放數據{?br /> ?        應用E序級:採用高效SQL語句Q合理安排事務,應用游標Q處理鎖?br /> 本文第一、第三、第四方面的內容不做a論Q第二方面提到的概念只適用於Sybase數據庫?br />
1Q? 調優工具
        在分析Sybase數據庫的性能時,要用C些數據npȝ本n提供的性能調優工具Q包括幾個系i存儲過E:
名稱        功能要介紹
sp_sysmon        企業級系i性能報告工具
sp_lock        查看鎖的情況
sp_who        查看R程的活動情?br /> sp_procqmode        存儲過程的查詢處理模?br /> sp_configure        配置SQL Serverpȝ級參?br /> sp_estspace        估計創徏一個表需要的I間和時?br /> sp_spaceused        估計表的^行數及表和索引佔用的空?br /> sp_monitor        監視CPU、I/O的箔a活動情?br />
在利用isql{一些工hQ還可以a置查詢會話中的qր選項,來顯CSQL語句埯時的各種ip分析i果Q?br /> 指o        On 的含?br /> set noexec on/off                        分析SQL語句後,還要埯
set statistics io on/off        ipSQL埯所需I/O
set statistics time on/off        ipSQL語句埯耗時
set showplan on/off                        示查詢a劃

1Q? sp_sysmon 的?br /> 企業級性能報告工具、系i存儲過E?sp_sysmon 的用方法:
在isql 下,首先輸入          sp_sysmon 'begin_sample'          啟動一個報告採樣過一D|間後Q再輸入          sp_sysmon 'end_sample'                i束上次報告採樣
或者緊跟一參數                        sp_sysmon 'end_sample', "dcache" i束上次報告採樣Q?但只示數據R衝QData Cache ManagementQ這一部分的情況?br /> 能替換dcache的可選參數如下表所C:
參數        參數全稱Q內容範圍解?br /> Dcache        Data Cache ManagementQ數據m?br /> Kernel        Kernel UtilizationQ有關引擎、網i和I/O{情?br /> Wpm        Worker Process Management
Parallel        Parallel Query Management
Taskmgmt        Task Management
Appmgmt        Application Management
Esp        ESP Management
Housekeeper        Housekeeper Task Activity
Monaccess        Monitor Access to Executing SQL
Xactsum        Transaction Profile
Xactmgmt        Transaction Management
Indexmgmt        Index ManagementQ烦引管?br /> Mdcache        Metadata Cache Management
Locks        Lock ManagementQ鎖理
Pcache        Procedure Cache Management
Memory        Memory Management
Recovery        Recovery Management
Diskio        Disk I/O ManagementQ磁盤I/O理
Netio        Network I/O Management

1Q?
用sp_sysmon可以得到數據庫系iq性能基準報告Q但要在比較I定的狀態下產生Q方可作為參考和照的依據?br />
1Q? 理解存儲Ҏ
只有清楚數據庫存儲數據的底層細節Q如數據頁、烦引頁的物理結構,每一行的大小a算Q不同類型列佔用的寬度等{問,才能各E調優措施有個深入領會。關於這個問,比較複雜和細R,請自行參閱有關書c?br /> 一般地Q對於更Ҏ據的操作Q要盡量促進數據n進行直接更新Q?Direct Updates Q,所以要遵守以下q條原則Q?br /> 1Q除非必要,避免使用允許null值的列和可變長度的列?br /> 2Q如果varchar ?varbinary 列填充得比較滿,毫不猶U轉成 char ?binary 列。對於徏表時指定的頁填充率(page fillfactorQ參數,要權衡確定數值大。一般:|適合於有a多隨機插入的表Q該表的數據E常被刪除,又經常被增加Q大|適合於大多數的數據被增加到表末尾Q如客票pȝ的售存根和退存根表?br />
2 SQL Server級的調優
2Q? 理׃n內存
        數據庫性能優化的首要方面是最優管理內存。數據n佔用的共享內存分成數據m衝(data cacheQ、存儲過Em衝(Procedure cacheQ等q֡。在isql 下?sp_configure 'cache' 可以看到存儲過程R衝所佔百分比Qprocedure cache percentQ,整個數據m衝大(total data cache sizeQ?{參數?br />
2Q?Q? 存儲過程R衝QProcedure cacheQ?br /> 存儲過程R衝保持以下象的查詢計劃:
Procedures                        Q存儲過E?br /> Triggers                                Q觸發器
Views                        Q視?br /> Rules                        Q規?br /> Defaults                                Q缺?br /> Cursors                                Q游?br /> 存儲過程不可重入Q意x個並發用戶調用都會在內存中產生一個拷貝?br /> Procedure, triggers, and views 當它們被裝載到procedure cache中時Q被查詢優化器優化,建立查詢a劃。如果存儲過E在R衝中,被調用時׃需要重新編譯。如果procedure cache太小Q存儲過E就會經常被其他調入內存的存儲過E沖z掉Q當再次被調用時Q存儲過E又被調入內存,再重新編譯,用戶請求因此不得不等待。最嚴重的情況,如果procedure cache不夠Q存儲過E甚至都不能運行。所以在內存_的情況下Qprocedure cache percent 參數盡可能大一些?br />
2Q?Q? 數據R衝QData CacheQ?br />         數據R衝用來R存數據頁和索引頁,是除d儲過Em衝,pȝ其他佔用的m衝外的剩內存空間。通過i服務器增加物理內存擴大數據R衝Q是最有效的方法。當Ӟ如果不能加內存,只能通過減少存儲過程R衝的比例等Ҏ來擴大數據m衝了。通過 sp_configure "extent I/O buffers", 20Q可調) 命oQ在Data Cache中保留一些頁用於創建烦引時使用Q可以顯著提高創建烦引的性能。但要注意每開闢一個m衝佔?6K 字節的系i內存?br />
2Q?Q? 命名R衝
        通過如下的命令:
1>; sp_helpcache
2>; go
查看某客數據n中命名m衝,得到的結果如下:
Cache Name                Config Size     Run Size       Overhead

------------------------ -------------   ----------     ----------
DS30_Tran_Log              20.00 Mb       20.00 Mb        2.05 Mb
Systemtable                    20.00 Mb       20.00 Mb        2.05 Mb
default data cache          0.00 Mb     4462.86 Mb      464.97 Mb
left_base_center            16.00 Mb       16.00 Mb        1.57 Mb
price_cache                     8.00 Mb        8.00 Mb        0.85 Mb
可以看出?個命名m衝,分別E定客票pȝ的應用日誌表、一些重要且常用的系ip、余表、票價系列表Q另?個是~省數據R衝。這種配置還不是最合理Q應該進一步把Systemtable這個命名m衝細分成很多個,每一個單獨存放一늳ip?br />
2Q?Q? R衝{略
R衝{略是指把數據提前讀入內存的制Q分預取{略(Prefetch rategyQ即大I/O{略)和取後馬上丟策?Fetch-and-Discard)、提C策(Hints){幾E。可以在三個級別上a置表數據的預取{略(Prefetch StrategyQ即大I/O{略)|像級,會話級,查詢級。如果三個級別上都有a置Q它們發生作用的優先順序是:像?>; 會話?>; 查詢級。對於如何在查詢級利用指定的R衝池,可以查看下面例子Q?KR衝池)Q?br /> select au_fname, au_lname
  from authers (prefetch 4)
where au_id in ( A372020631, ..., A1887081515 )
go
DSS應用往往得益於大的I/OQ應該放開large I/O strategy預取{略?br /> 如果一個應用傾向於OLTP特RQ用戶能在會q關掉Prefetch來提高性能。對於OLTP應用Q關閉large I/O strategy預取{略。對於所取到的頁不會有重用的情況Q放開fetch-and-discard{略。客系i對存根數據進行ip的應用,如財收日i賬Q營銷分析數據整理模塊和E合查詢{,都可以利用這一i論。查看幾個操作頻J且較大的表上的R衝{略Q用如下命oQ?br /> sp_cachestrategy center,seat_area
sp_cachestrategy center,sale_record0505

2Q? 理?br /> 2Q?Q? 頁鎖升級閥限
優化鎖的重要考慮是設|頁級鎖升級升級成表級鎖的閥限。要盡量避免頁鎖很快升級成表級鎖。在某客數據n中,用sp_configure 『lock』可以看到如下結果:
deadlock checking period           500           0        1000      1000
number of locks                  5000       46875      200000  200000
page lock promotion HWM      200           0       10000       10000
page lock promotion LWM       200           0         200         200
page lock promotion PCT         100           0          90          90
可以看到頁鎖升級的閥限有三個:HWMQ最高點Q??0000QLWMQ最低點Q為200QPCT?0。Sybase數據庫內部根據PCT值按公式PCT*TAB_SZ/100得出a算閥限Q如果計閥?< LWM, 鎖升級發生在LWM|如果a算閥限 < HWMQ鎖升級發生在HWM倹{如?LWM < a算閥限 < HWM Q鎖升級發生在PCT*TAB_SZ/100倹{?br /> 鎖升級閥限設|分像級和服務器級兩種?br /> 針對像級設|(數據庫上的表或表上的索引Q,配置命o是:
sp_setpglockpromote {"database" | "table"}, objname, new_lwm,new_hwm, new_pct
針對服務器級a置Q配|命令是Q?br /> sp_setpglockpromote server, NULL, new_lwm, new_hwm, new_pct?br /> 如果要刪除掉像級上的頁鎖升級閥限,用:
sp_dropglockpromote {"database" | "table"}, objname

2Q?Q? 減少鎖爭奪的ҎQ?br /> 1Q降式a計數據庫,創徏冗余表?br /> 2Q把堆表Q沒有聚族烦引的表)分區?br /> 3Q對於小表,使用fillfactor和max_rows_per_page來減行密度Q從而各行數據分佈到許多頁Q此Ҏ適用於SQL Server 11版,於11.9.2版以後的Sybase數據Q有了行級鎖Q此Ҏ必要性不大)?br />
2Q? 理臨時?tempdb)
理臨時庫一個重要原則是要避免臨時表跨多個設備,可以把tempdb從mastera備中分離出來,攑ֈ一個單獨的a備上去。這樣可以減少存取pȝ表時I/O資源的爭奪。用sp_dropsegment 存儲過程從mastera備中移除tempdb的defaultD和systemDc為了進一步提高tempdb的I/O速度Q可以考慮把tempdb整個放在RAM 驅動器或固態存儲a備上,存取速度是一般磁盤的1000倍。一般情況下Qtempdb會非帔RJ地爭奪和佔用缺省數據m衝,因為查詢會話中有a多臨時表要創徏、計和刪除。所以推薦把tempdbE定到它自己的命名m衝,這樣可以防止臨時像在內存中的活動沖z掉~省數據R衝中的其他象Q利於在多個m衝間展開I/O。在使用臨時表的時候,還有一個原則:盡量^小表規模和行的寬度Q每一行只包括必要的列。例如在用select * into生成臨時表時Q如果只需要幾個列的數|׃要用這樣的語句,而直接選取需要的列?br />
2Q? 使用多引擎(Multiple Network EnginesQ?br /> 如果操作pȝ使用了多個CPUQ那麼用sp_configure 配置數據庫的參數Q在R引擎數(max online engines)Q可以擴展系iqE絡I/O定wQ分佈網iI/O到各個引擎,從而提高性能Q允a更多的用戶連接?br /> 在用戶登錄數據n時,^是先登錄到引擎0Q由引擎0在可用引擎隊列中選擇一個掛最連接的引擎來傳遞socket描述W,從而重定向連接到那個引擎,p引擎去處理跟此用戉接盔R的所有網i活動?br /> 於多引擎SMPi構QSQL Server引入了自旋鎖(spinlock)的一E數據結構,在多個引擎間׃n。對g同類型的dQ在哈希表上分配不同的自旋鎖Q有頁鎖自旋鎖、表鎖自旋鎖和地址自旋鎖?br /> 自旋鎖的配置Q?br /> sp_configure "page lock spinlock ratio", newval
sp_configure "table lock spinlock ratio", newval
sp_configure "address lock spinlock ratio", newval
增大數|可以減少撞Q提高並發操作度。但是每一個自旋鎖i構要佔?56字節的內存?br /> 如果數據庫發?279錯,可能原因Q?br /> 1Q不允許_的鎖Q解法是用sp_configure 調大 number of locks 數?br /> 2Q在engine freelock R衝中沒有夠的鎖,解決辦法是用sp_configure調大 max engine freelocks 數倹{?br /> 如果數據庫系i׃用了4個引擎,那麼每個引擎的自由鎖m衝中包含Qeach engine-specific freelock cache 包含 5000 * .20 /4 = 250 個鎖?br /> 在^時,E常用sp_monitor和sp_sysmon監視CPU使用率,如果所有CPU的利用率高於85%Q增加CPUQ然後增大數據n的引擎數Q可以改善性能?br />
2Q? a備使用的優?br /> 把最常插入的表分區Q放在多個設備上Q這樣可以創徏多個頁鏈,從而改善多個並發插入時的性能Q因為每一個插入都要找到頁鏈,頁鏈有多個,允a多個插入同時進行。這一點,其適用於客系iq存根表和a票存根表(CG30_RRTQ,所帶來的性能改善會非常明?br /> 物理I/O的代僚w大於邏輯I/OQ所以要盡量減少盤進行物理I/O的次數,盡量多進行內存中的邏輯I/O。用statistics io工具和sp_sysmonQ來觀察磁盤I/O。可以配|用大的I/O來減物理I/O的次數,Ҏ有三個:
1Q用更多的磁盤;
2Q表和烦引分開到不同的磁盤;
3Q增加一ơI/Opȝ參數值的大小?br /> SQL Server^是為I/O請求建立一個磁盤檢查的調度璎ͼ用sp_configure "I/O polling process count"來提高數|加長璎ͼ可以降低引擎的檢查次數,提高吞吐量。但較小的g般有助於減少響應時間?br /> 於可用的磁盤I/O控制塊,要查看操作系i文檔,用sp_configure "disk i/o structures"配置Q這個數D盡可能高?br /> 分離日誌和數據,C同的a備Qtempdb自己的設備;分離表和索引C同的a備。這些Ҏ都可以減I/O?br />
2Q? 事務處理的調優
2Q?Q? 事務型
事務處理無外乎三E:1,OLTP; 2, DSS; 3, OLTP + DSS 的؜合負?br /> OLTPQ聯事務處理)的特點:
?nbsp;       數據插入、修改和刪除ȝ?br /> ?nbsp;       E常操作的是單個記錄?br /> ?nbsp;       當不適當a計時,傑֐於碰撞和衝突?br /> DSSQ決{支持系i)的特點:
?nbsp;       數據修改不太ȝ?br /> ?nbsp;       如果有插入和刪除Q是大批量的?br /> ?nbsp;       qx一般是只讀操作?br /> ?nbsp;       表連接很常見?br /> ?nbsp;       有比較特別的查詢?br /> OLTP + DSS 混合負載的特點權衡:
?nbsp;       在性能斚w要比較,是要吞吐量還是響應時間?br /> ?nbsp;       在鎖斚w要比較,是要並發性D呢還是要數據一致性D?br />
2Q?Q? 事務理原則
一般的事務理原則有:
1)        分解大的事務成多個小的事務。如客票數據的備份操作中Q要刪除過期數據Q如果設a小事務做@璎ͼ便不會媄響應用,完全可以做到M時候備份和刪除Q不一定非得等服務器閒的時候做?br /> 2)        避免在單個事務中更新或刪除大量的數據行。比如客系iq席位庫數據清理,即在服務器閒的時候做這種操作Q也會鎖定整個表Q媄響售?br /> 3)        盡量用可以接受的最低孤立級(isolation level)Q來提高並發度。如在余查詢等功能的應用中Q用這種孤立級,便可以最大程度地降低售的影響?br /> 4)        提高事務吞吐量的措施包括Q避免g遲更斎ͼ盡可能用存儲過E等{?br />
2Q?Q? 跟事務特늛關的數據庫可調參數或Ҏ?br /> 相對於OLTP應用QSQL Server有一些特性來滿要求?br /> 1)        命名R衝QNamed cacheQ?br /> 於命名R衝Q可以配|多個不同大的內存池,來滿不同的應用需求。對於多個引擎的情況Q命名m衝還有一項重要的功能是降低自旋鎖的內部爭奪?br /> 2)        日誌I/OR衝大小可配|?br /> sp_logiosize ["default" | "size" | "all" ]
~省值是4KQ但如果4K內存池沒有配|,SQL Server會?K大小的內存池
3)        堆表可分區Q分佈插入操作到各個設?br /> 適用於頻J插入的表和有並發BCP倒入數據的表Q如客票pȝ的售存根和退存根表?br /> 4)        鎖升級閥限可配置?br />
相對於DSS應用QSQL Server也有一些特性來滿要求
1)        應用大的 I/O R衝?br /> 用sp_poolconfig來配|?br /> 2)        E定p到命名m?br /> ?sysindexes, syslogs, 注意如果?syslogs 攑ֈ單獨的m衝中Q可以減在~省或其他命名m衝上的自旋鎖爭奪。對於客系iqtrain_dir, stop_time, 價? 取票存儲過程盔R的表都可以放在單獨的命名R衝上?br /> 3)        取後丟棄R衝{略 (Fetch-and-discard cache strategy)
不會沖洗掉m衝中的常用對象,可以減少MRU鏈的爭奪Q較對OLTP事務的干擾?br /> 於收入ip應用Q箔a過往存根表中的數據,可以應用這一{略?br />
2Q? E絡斚w的調?br /> Sybase客戶和服務器之徏傳遞的是TDS包,~省大小?12字節。對D傌大批量數據的應用Q如BCP?文本/圖像的取用、大i果集SQL語句Q要用下面的配置命o配置大的TDS包大?br /> sp_configure "default network packet size", nnn
sp_configure "maximum network packet size", nnn
        於isql 和bcpQ可以在應用級指定TDS包的大小Qisql -Usa -P –AnnnQbcp -Usa -P –Annn?br /> 注意在調大maximum network packet size的參數後Q要增大 additional network memory 參數Q來適應 maximum network packet size 的要求?br />

]]>
sp_sysmon性能诊断l果分析http://www.aygfsteel.com/shanben/archive/2008/07/20/216156.html虎啸长沙,龙跃深圳.虎啸长沙,龙跃深圳.Sun, 20 Jul 2008 02:56:00 GMThttp://www.aygfsteel.com/shanben/archive/2008/07/20/216156.htmlhttp://www.aygfsteel.com/shanben/comments/216156.htmlhttp://www.aygfsteel.com/shanben/archive/2008/07/20/216156.html#Feedback0http://www.aygfsteel.com/shanben/comments/commentRss/216156.htmlhttp://www.aygfsteel.com/shanben/services/trackbacks/216156.html

文章描述了通过sp_sysmon对Adaptive Serverpȝq行情况有一个全面系l了解,有利于更好地熟悉pȝ性能Q更为有效地q行pȝ理Q合理地利用和配|系l资源,辑ֈpȝ性能调优的目的?
?8个方面了解在用系l性能状况Qƈ在适当的时候利用环境参数进行性能调优Q?

1、内核管理(kernalQ?br /> 2、应用管理(appmgmtQ?br /> 3、数据缓存管理(dcacheQ?
4、ESP理QespQ?br /> 5、烦引管理(indexmgmtQ?
6、锁理QlocksQ?
7、内存管理(memoryQ?br /> 8、元数据高速缓存管理(mdcacheQ?br /> 9、Q务管理(taskmgmtQ?
10、监视器讉KSQL的执行(monaccessQ?
11、网lI/O理QnetioQ?
12、ƈ行查询管理(parallelQ?br /> 13、过E缓存管理(pcacheQ?br /> 14、恢复管理(recoveryQ?
15、事务管理(xactmgmtQ?br /> 16、事务概要(xactsumQ?
17、磁盘I/O理QdiskioQ?
18、工作进E管理(wpmQ?

括号后英文短词是该模块参数?
步骤Q执行sp_sysmon “00:10:00”QserverU系l存贮过E,不需要打开某个数据库)Q或者执行如下格式的q程Q查看具体操作批命o对应pȝ性能情况Q(10分钟pȝ查看Q?
sp_sysmon begin_sample
SQL语句或者存贮过E?
sp_sysmon commit_sample
本实验采?sp_sysmon “hh:mm:ss”,性能模块名?
可了解当前系l在各方面的pȝq行状况Q性能出现什么问题和不^衡不协调之处Q学会用相应的参数和措施进行解军_调优Q不断比较对照调整前后的性能状况Q最l改善系l性能?
说明Q?、该命o执行l果集的开头相同如下:


======================================================================
Sybase Adaptive Server Enterprise System Performance Report
======================================================================
Server Version: Adaptive Server Enterprise/11.9.2/1031/P/NT (IX86)/OS 3.
Server Name: Server is Unnamed
Run Date: May 28, 2001
Statistics Cleared at: 15:57:27
Statistics Sampled at: 16:07:28
Sample Interval: 00:10:00


2、执行结果集的每列信息提C:

per sec Q?采样期间每秒的^均?
per xactQ?采样期间每提交一个事务的q_?
count Q?采样期间每秒的总计?
% of totalQ?占L的百分比Q根据不同情况各有不?

3、结果集对应l出性能情况描述、分析以及可调性说?
4、只l出部分模块的监视结果(可能有删节)Q用sp_sysmon “hh:mm:ss”可看全部详细情况?
单元一Q监视内核利用情?
命o行:sp_sysmon “00:10:00”,kernal
l果Q?

Kernel Utilization Q内核利用)

------------------
Engine Busy Utilization
Engine 0 1.8 %
引擎J忙E度应在80%-90%之间Q如果长期在90%以上Q应考虑增加引擎数来改善性能。因为此时内部管理进E无法向盘写入Q则查点需要将许多写回磁盘,而检查点q程很可能将CPU的利用率提高?00%Q导致响应时间明昑֢加?
CPU Yields by Engine per sec per xact count % of total
------------------------- ------------ ------------ ---------- ----------
Engine 0 6.6 0.6 3949 100.0 %
引擎攑ּCPUơ数Q? of total=1个引擎放弃次?所有引擎放弃次敎ͼ如果昄引擎利用率较低,可通过攑ּ数判断是否真实反映引擎的停止情况。增?#8220;runnable process search count”Q引擎放弃CPUlOS之前一个引擎@环查扑֏执行d的次敎ͼ参数可增加CPU的驻留时_而如果想减少引擎在空闲时查I/O的时_可减该参数的倹{?
Network Checks
Total Network I/O Checks 0.0 0.0 0 n/a
引擎发送或接收|络包的ơ数。引擎空闲时频繁查网l包Q如果该值很低?#8220;CPU Yields by Engine”的值高Q表明引擎可能被频繁攑ּ?
可能包括d和非d两种查方式。非d方式不管有无I/O{待都对|络q行I/O查。如果引擎已被放弃ƈ正执行阻塞网l检查,则在|络包到达以后仍保持一D늝眠时_潜伏期)。此时增?#8220;runnable process search count”Q缺?000Q参数可减少潜伏期,保持引擎有较长的循环查时_而不是过早被攑ּ?
Disk I/O Checks盘I/O查情况:
Total Disk I/O Checks 693.2 58.8 415939 n/a
Checks Returning I/O 469.9 39.9 281921 67.8 %
引擎对I/O情况的有效检查(I/O完成ơ数Q,如过高或q低Q用“i/o polling process count”QServer的调度程序在查磁盘I/O或网lI/O之前可执行的最大进E数Q参数增加或减少查频率。通常说增加该值可增加有大量磁盘或|络I/O的应用的吞吐量,反之Q减该值有可改善其响应旉?
Avg Disk I/Os Returned n/a n/a 0.03020 n/a


增加引擎在检查期间的{待旉可改善吞吐量Q因为减引擎检查I/O旉相应增加执行q程的时间?

单元二:监视q行查询理
命o行:sp_sysmon “00:10:00”,parallel
l果Q?报告q行查询ơ数、执行期间调整了多少工作q程Q以及在merge和sort操作时加锁情c?

Parallel Query Management
-------------------------
Parallel Query Usage per sec per xact count % of total
------------------------- --------- --------- ------- ----------
Total Parallel Queries 0.1 8.0 16 n/a
优化器自动确定是否ƈ行操作,以及为此使用多少工作q程?
WP Adjustments Made
Due to WP Limit 0.0 0.0 0 0.0 %
会话U的限制?#8220;set parallel_degree” or “set scan_parallel_degree”参数控制?
Due to No WPs 0.0 0.0 0 0.0 %
~Z可用的工作进E导致申请工作进E数减少。可适当增加“number of worker processes”
Merge Lock Requests per sec per xact count % of total
报告q行merge操作的锁h敎ͼ很快授予锁的数目Q下?U类型锁的等待情况:
------------------------- --------- --------- ------- ----------
Network Buffer Merge Locks
Granted with no wait 4.9 438.5 877 56.2 %
Granted after wait 3.7 334.5 669 42.9 %
Result Buffer Merge Locks
Granted with no wait 0.0 0.0 0 0.0 %
Granted after wait 0.0 0.0 0 0.0 %
Work Table Merge Locks
Granted with no wait 0.1 7.0 14 0.9 %
Granted after wait 0.0 0.0 0 0.0 %
------------------------- --------- --------- -------
Total # of Requests 8.7 780.0 1560
Sort Buffer Waits per sec per xact count % of total
------------------------- --------- --------- ------- ----------
Total # of Waits 0.00.0 0 n/a
q行排序所?#8220;排序~冲区等?#8221;锁。如果等待数较高Q可考虑加大“number of sort buffers”的倹{?
======================================================================

单元三:监视执行SQL的访问情?
命o行:sp_sysmon “00:10:00”,monaccess
l果Q?

Monitor Access to Executing SQLQ监视执行SQL的访问情况)

-------------------------------
per sec per xact count % of total
------------ ------------ ---------- ----------
Waits on Execution Plans 0.0 0.00 n/a
每个试图使用sp_showplan但必ȝ待获得访问查询计划的读资|报告{待ơ数?
Number of SQL Text Overflows 0.0 0.0 0 n/a
SQLҎ本超q文本缓冲区大小的溢出次数?
Maximum SQL Text Requested n/a n/a 0 n/a
(since beginning of sample)
“max SQL text monitored”Q缺省ؓ0Q参数指定分配给每个q接用户的内存量Q用以保存SQL文本到内存,供sever监视器共享。推荐gؓ1024?
======================================================================
单元四:事务概要
命o行:sp_sysmon “00:10:00”,xactsum
l果Q?

Transaction ProfileQ事务概要)

报告提交的事务数Q要量减少多数据库事务的提交(一个事务对多数据库的访问)
Transaction Summary per sec per xact count % of total
------------------------- ------------ ------------ ---------- ----------
Committed Xacts 11.8 n/a 7073 n/a
Transaction Detailper sec per xactcount% of total
------------------------- ------------ ------------ ---------- ----------
Inserts
APL Heap Table 13.6 1.2 8189 100.0 %
如果大量堆表数据插入Q结合查看锁的堆表最后一锁情况Q是否引起严重的锁争夺,随之调整相应的数据表Q避免因为锁资源争夺引v性能降低?
APL Clustered Table 0.0 0.0 0 0.0 %
对全锁的表插入数据行,注意可能引v的页分裂?
Data Only Lock Table 0.0 0.0 0 0.0 %
------------------------- ------------ ------------ ---------- ----------
Total Rows Inserted 13.6 1.2 8189 100.0 %

单元五:事务理
命o行:sp_sysmon “00:10:00”,xactmgmt
l果Q?

Transaction ManagementQ事务管理)

----------------------
  用户日志cacheQ每个用户对应一个)降低了写入事务日志的ơ数Q如果是多处理器pȝq减了事务日志当前늚争夺Q因而提高了性能。可配置环境参数“user log cache size”Q缺省最?048字节Q,太小D用户日志常满qJ写入事务日志,太大则每个连接用户都扩大Q又造成内存费。原则是配置不超q事务完成写入事务日志的长度?
ULC Flushes to Xact Log per sec per xact count % of total
各种cdD写入事务日志的次?
------------------------- ------------ ------------ ---------- ----------
by Full ULC 0.0 0.0 0 0.0 %
如果% of total的Dq?0%Q考虑增加环境参数“user log cache size”的倹{?
by End Transaction 11.8 1.0 7095 95.5 %
以显式或隐式的rollback或commit标志事务l束。值大表示有很多短事务?
by Change of Database 0.0 0.0 12 0.2 %
如果值大Q考虑减低ULC中大?K的缓冲池Q降低或去除大块I/O池?
by System Log Record 0.5 0.0 321 4.3 %
? of total值大?0%q且ULC长度大于2048Q考虑降低ULC的长度?
by Other 0.0 0.0 0 0.0 %
------------------------- ------------ ------------ ----------


Total ULC Flushes 12.4 1.1 7428

单元六:索引理
命o行:sp_sysmon “00:10:00”,indexmgmt
l果Q?

Index ManagementQ烦引管理)
索引可以加速数据检索,但同时又降低了更新的性能?

----------------
Nonclustered Maintenance per sec per xact count % of total
非聚烦引维护情况:报告因ؓ插入、删除、修攏V页分裂{造成的烦引维护次数?
------------------------- ------------ ------------ ---------- ----------
Ins/Upd Requiring Maint 0.0 0.0 0 n/a
影响索引的插入和修改的操作数Q需要维护非聚簇索引。对于插入,有多非聚簇索引Q就需要增加多烦引维护的开销Q对于修改,则只对相关的索引q行l护?
# of NC Ndx Maint 0.0 0.0 0 n/a
因ؓ插入和修攚w要对多少非聚烦引进行维护?
Deletes Requiring Maint 0.0 0.0 0 n/a
# of NC Ndx Maint 0.0 0.0 0 n/a
影响索引的删除操作次敎ͼ以及需要维护的非聚烦引数?
RID Upd from Clust Split 0.0 0.0 0 n/a
在APLQ全锁Q的聚簇索引表发生页分裂ơ数Q相应需要进行烦引维护?
# of NC Ndx Maint 0.0 0.0 0 n/a
分裂后对应的烦引维护次数?
Upd/Del DOL Req Maint0.0 0.0 0 n/a
DOL表发生媄响烦引的修改删除操作ơ数?
# of DOL Ndx Maint 0.0 0.0 0 n/a
对应索引l护ơ数?
Page Splits 0.0 0.0 0 n/a
包括数据c聚烦引页和非聚簇索引因为插入新行没有够空间单元导致页分裂。页分裂造成修改索引c修攚w指针、增加锁资源争夺{从而降低性能?
如果分裂度高(ơ数多)Q而又是对全页加锁表进行插入操作,q且表有l合键的聚簇索引Q这时可通过改变那些索引的页分裂Ҏ减少分裂,x说组合键的第一个键表中在用Q第二个键列值按升序排列Q也可考虑用fillfactor的合适配|来降低在聚烦引的APL表的数据以及非聚簇索引的叶子数据页上的分裂?
对表插入行按照升序插入方式,q样发生分裂点也是在插入行点而不是在中_q样能够提高性能。通过dbcc tune (ascinserts, 1, "表名")讄插入方式Q?反之?
如果索引l护量大Q会因ؓl护需要额外的q程、额外的I/O、额外的索引锁从而媄响性能。可以通过Ҏ不同操作ơ数与导致的l护ơ数Q如果维护次数很多,q发生页分裂、retries{现象,严重时可考虑不用索引?
单元七:锁管?
命o行:sp_sysmon “00:10:00”,locks
l果Q?

Lock ManagementQ锁理Q?br /> 报告锁、死锁、锁提升和锁争夺的情?

---------------
Lock SummaryQ锁概述Q?per sec per xact count % of total
------------------------- ------------ ------------ ---------- ----------
Total Lock Requests 26.1 2.2 15676 n/a
d的锁h
Avg Lock Contention 0.0 0.0 0 0.0 %
q_锁争?
Deadlock Percentage 0.0 0.0 0 0.0 %
死锁出现的比?
Lock Hashtable Lookups 26.1 2.2 15677 n/a
对hash表的表、页、行锁的查询ơ数?
Avg Hash Chain Length n/a n/a 0.00038 n/a
Hash铑^均长度:采样期间每个hash桶的q_加锁数目。如果每个hash链超q?个锁Q可用参?#8220;lock hashtable size”调整扩大加锁hash表的大小Q尤其是大型bcp可配|更大?
Lock Detail per sec per xactcount % of total
------------------------- ------------ ------------ ---------- ----------
对于各种cd的锁l节Q重Ҏ看其立即授予和等待情c?
Last Page Locks on Heaps 堆表最后页?
Granted 13.6 1.2 8189 100.0 %
Waited 0.0 0.0 0 0.0 %
------------------------- ------------ ------------ ---------- ----------
Total Last Pg Locks 13.6 1.2 8189 100.0 %
如果堆表最后一锁的争夺激烈(其是热对象的等待时间过长)Q考虑建立聚簇索引Q或者表分区来解决锁资源争夺问题?
Deadlocks by Lock Type per sec per xact count % of total
------------------------- ------------ ------------ ---------- ----------
Total Deadlocks 0.0 0.00 n/a
死锁出现ơ数。当很多事务同时讉K同一个数据库Ӟ会加剧锁资源争夺Q严重时事务之间会发生死锁。可用sp_object_stats查明死锁位置。该q程报告资源争夺最Ȁ烈的10张表、一个数据库中资源争夺的表和单个表的争夺情况。语法ؓsp_object_stats interval [, top_n
[, dbname [, objname [, rpt_option ]]]]Q查看锁争夺情况只需讄interval?#8220;hh:mm:ss”。如果显C每U锁的争夺程度超q?5%Q应该改变加锁方式,比如表的全页锁改成数据页锁,数据锁Ҏ数据行锁{?
Deadlock Detection 死锁?
Deadlock Searches 0.0 0.0 0 n/a
死锁次数。死锁检将特花Ҏ_如果次数过多,用参?#8220;deadlock checking period”Q缺?00msQ调节死锁检周期?
Lock Promotions 锁提?
Total Lock Promotions 0.0 0.0 0 n/a
锁提升指排它锁到排它表锁、共享页锁到׃n表锁、排它行锁到排它表锁、共享行锁到׃n表锁、共享next_key锁到׃n表锁。查看锁提升是否加剧了锁争夺或死锁发生,如果锁争夺激烈ƈ且锁提升频繁Q考虑调整锁的隔离U别Q对全页锁表Q需?U也可强制ؓ3U?
Lock Timeouts by Lock Type per sec per xact count % of total
------------------------- ------------ ------------ ---------- ----------
Total Timeouts 0.0 0.0 0 n/a

单元八:数据cache理
命o行:sp_sysmon “00:10:00”,dcache
l果Q?

Data Cache ManagementQ数据cache理Q?/p>

---------------------
  报告数据cache的自旋锁争夺、cache应用、cacheM错失、配|缓冲池的翻转、清z缓存(包括脏页Q、预取的h与拒l、读脏页h{情c?
Cache Statistics Summary (All Caches)
-------------------------------------
per sec per xactcount % of total
------------ ------------ ---------- ----------
Cache Search Summary cache的击中和错失ơ数
Total Cache Hits 18.6 1.6 11171 89.9 %
Total Cache Misses2.1 0.2 1251 10.1 %
------------------------- ------------ ------------ ----------
Total Cache Searches 20.7 1.8 12422
Cache Turnover
Buffers Grabbed 0.2 0.0 102 n/a
~存掠夺。Count表示cache~存块链中从LRU末端取走的缓存块ơ数?
Buffers Grabbed Dirty 0.0 0.0 0 0.0 %
脏页掠夺。在从LRU末端取走脏页时必ȝ待将脏页写回盘。如果其值非Ӟ可找出是什么cache受到影响Q这事关cache的击中性能问题?
Cache Strategy Summary cache{略Q对所有的cacheQ?
Cached (LRU) Buffers 19.8 1.7 11880 100.0 %
报告有多cache中的~存块放|到MRU/LRU铄头部?
Discarded (MRU) Buffers 0.0 0.0 0 0.0 %
报告多少~存块采用了获取-丢弃{略Q缓存块用过以后被放到缓存块铄h标记处?
Large I/O Usage
0.0 0.0 0 n/a
大块I/Oh使用ơ数Q这里没有设|大块I/OQ故均ؓ0|也没有其授权或拒l用情c?
Large I/O Effectiveness
大块I/O的用效果,癑ֈ比g表示很少的页被带入cache供查询用,可进一步查看单个cache的用情c?
Pages by Lrg I/O Cached 0.0 0.0 0 n/a
通过涉及的页数衡量性能是否有益。低的百分比值意味着表的存贮l构很碎Q或是不恰当的cache配置{略?
Asynchronous Prefetch Activity
0.0 0.0 0 n/a
异步预取情况可结合磁盘I/O理查看。可看参?#8220;global async prefetch limit”?
Other Asynchronous Prefetch Statistics
APFs Used 0.0 0.0 0 n/a
异步预取合格的页数?
APF Waits for I/O 0.0 0.0 0 n/a
q程{待异步预取完成的次数。表C查询需要的|有尽早地完成异步预取Q这栯E处于等待状态。出C定的癑ֈ比是合理的:查询的首ơ异步预取请求通常需要等待;每次的顺序扫描移动到新的分配单元时发出预取请求,查询必须{待W一ơ的I/Ol束Q每ơ非聚簇索引扫描扑ֈ合适的行集Q也会发出对늚预取hQ也要等待第一ơ的返回?
APF Discards 0.0 0.0 0 n/a
报告已经被异步预取读入但在用之前就被放弃的|。如果其值高Q徏议增加缓冲池的尺寸单位(比如?K增加4K?K?6K的缓冲池Q以改善性能Q或者表C预取进入cache的很多页q不为查询所需要?
Dirty Read Behavior
Page Requests 0.0 0.0 0 n/a
隔离Uؓ0的脏读请求的|?
-------------------------------------------------------------------------------
Cache: default data cache ~省数据cache的情况:
per sec per xact count % of total
------------------------- ------------ ------------ ---------- ----------
Spinlock Contentionn/a n/a n/a 0.0 %
自旋锁只对SMP环境有用。当一个用户Q务对cache的修改完成之前,其它d不能访问该cache而只有等待。虽然自旋锁ȝ旉短,但对于高事务率的多处理器pȝ的性能依然有不好媄响,如果自旋锁比例超q?0%Q应考虑建立命名cache或者是增加cache分片?
Utilization n/a n/a n/a 100.0 %
下面是cache查的具体情况Q?
Cache Searches
Cache Hits 18.6 1.6 11171 89.9 %
Found in Wash 1.1 0.1 677 6.1 %
Cache Misses 2.1 0.2 1251 10.1 %
------------------------- ------------ ------------ ----------
Total Cache Searches 20.7 1.8 12422
Pool Turnover
2 Kb Pool
LRU Buffer Grab 0.2 0.0 102 100.0 %
Grabbed Dirty 0.0 0.0 0 0.0 %
------------------------- ------------ ------------ ----------
Total Cache Turnover 0.2 0.0 102
Buffer Wash Behavior
Statistics Not Available - No Buffers Entered Wash Section Yet
Cache Strategy
Cached (LRU) Buffers 19.8 1.7 11880 100.0 %
Discarded (MRU) Buffers 0.0 0.0 0 0.0 %
Large I/O Usage
Total Large I/O Requests 0.0 0.0 0 n/a
Large I/O Detail
No Large Pool(s) In This Cache
Dirty Read Behavior
Page Requests 0.0 0.0 0 n/a


单元九:内存理
命o行:sp_sysmon “00:10:00”,memory
l果Q?
Memory ManagementQ内存管理)
per secper xactcount % of total
--------------------------- ------------ ------------ ---------- ----------
Pages Allocated 0.0 0.0 13 n/a
Pages Released 0.0 0.0 13 n/a

内存中分配一个新늚ơ数Q相当于分配新页敎ͼQ以及释攑ֆ存的|?

单元十:盘I/O理
命o行:sp_sysmon “00:10:00”,diskio
l果Q?

Disk I/O ManagementQ磁盘I/O理Q?/p>

-------------------报告serverM盘I/O行ؓQ包括读、写和逻辑讑֤上的semaphore争夺?
Max Outstanding I/Os per sec per xact count % of total
最大显著I/O敎ͼserverM开销的最大I/O敎ͼ分别通过server和引擎表C?
------------------------- ------------ ------------ ---------- ----------
Server n/a n/a 10 n/a
Engine 0 n/a n/a 10 n/a
I/Os Delayed by
pȝ遇到I/O延迟问题Q类gI/O被server或操作系l限刉塞一栗多数操作系l都有一个参数限制异步I/O数。可用sp_configure查看参数“allow sql server async i/o”?
Disk I/O Structures n/a n/a 0 n/a
辑ֈ盘I/Ol构极限从而被延迟的I/O数。当server过了可用磁盘I/O的控制块敎ͼI/O׃被gq,因ؓserver在开始一个I/Oh旉要通过d来得C个磁盘I/O控制块。如果其值非Ӟ通过讄增加参数?#8220;disk i/o structures”Q缺?56Q来增加盘I/O控制块数Q如果操作系l允许尽可能讄大一些,以用光盘I/Ol构的机会降到最?
Server Config Limit n/a n/a 0 n/a
用参?#8220;max async i/os per server”Q缺?147483647Q进行调整server一ơ所用异步磁盘I/Oh数?
Engine Config Limit n/a n/a 0 n/a
引擎配置最大异步磁盘I/Oh数限Ӟ用参?#8220;max async i/os per engine”查看和调整?
Operating System Limit n/a n/a 0 n/a
操作pȝ的限制数查看操作pȝ文?
Device Activity Detail
----------------------
Device:
master.dat
master per sec per xact count % of total
------------------------- ------------ ------------ ---------- ----------
Reads
APF 0.0 0.0 0 0.0 %
Non-APF 0.2 0.0 102 78.5 %
Writes 0.0 0.0 28 21.5 %
------------------------- ------------ ------------ ---------- ----------
Total I/Os 0.2 0.0 130 1.5 %
Device Semaphore Granted 0.2 0.0 130 100.0 %
Device Semaphore Waited 0.0 0.0 0 0.0 %
-----------------------------------------------------------------------------



]]>
sybase常用的命令集?/title><link>http://www.aygfsteel.com/shanben/archive/2008/07/19/216016.html</link><dc:creator>虎啸长沙,龙跃深圳.</dc:creator><author>虎啸长沙,龙跃深圳.</author><pubDate>Sat, 19 Jul 2008 04:40:00 GMT</pubDate><guid>http://www.aygfsteel.com/shanben/archive/2008/07/19/216016.html</guid><wfw:comment>http://www.aygfsteel.com/shanben/comments/216016.html</wfw:comment><comments>http://www.aygfsteel.com/shanben/archive/2008/07/19/216016.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/shanben/comments/commentRss/216016.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/shanben/services/trackbacks/216016.html</trackback:ping><description><![CDATA[以前的文,整理时发玎ͼ贴出<br /> 常用的命令集?br /> 一、配|命?br />    1、检查CPU使用情况Q?br />       sp_sysmon "internal","model"<br />       internal是监视时间。例如:"00:01:00"<br />       model是模块的名称。包?kernel','wpm','parallel','taskmgmt','appmgmt','esp','housekeeper','monaccess','xactsum','xactmgmt','indexmgmt','mdcache','locks','dcache','pcache','memory','recovery','diskio','netio'<br /> <br />    2、检查用的最大的引擎?CPU)<br />       sp_configure "max online engines"<br />       此命令还可以改变sybasepȝ使用CPU的数量?br />       注意Q改变后需要重新启动sybase才可以Ҏ生效。引擎的数量是ȝCPU数量减一<br /> <br />    3、显C引擎号、状态、相关Q务数以及引擎启动的时_<br />       select engine, status, affinitied, starttime from sysengines<br /> <br />    4、显C每个用LJ忙E度<br />       sp_reportstats<br /> <br />    5、监视配|参数的q行情况<br />       sp_monitorconfig "open objects"<br />       参数见sp_monitorconfig中的?br /> <br /> 二、权限命?br />    1、给一个用h所有的权限<br />       grant all to user_name<br /> <br />    2、给一个用hҎ张表的所有权?br />       grant all on table_name to user_name<br /> <br />    3、添加一个登?login)<br />       sp_addlogin<br /> <br /> 三、TSQL使用<br />    1、统计信息更?br />       select "print '"+name+"'"+char(10)+"update statistics "+name+ char(10) + "go"<br />         from sysobjects<br />        where (type='U' or type='S')<br />        order by name<br /> <br />    2、显C所有触发器的名U、徏立时?br />       SELECT USER_NAME(A.uid) 'Table Owner',<br />              B.name 'Table Name',<br />              A.name 'Trigger Name',<br />              CONVERT(char(10),A.crdate,101)+SUBSTRING(CONVERT(char(20),A.crdate,0),13,7) 'Create Date'<br />       FROM sysobjects A,<br />            sysobjects B <br />       WHERE A.type='TR' <br />         AND (A.id=B.instrig OR A.id=B.updtrig OR A.id=B.deltrig)<br /> <br />    3、关于参?br />       --生成建立已有参照的SQL语句<br />       select distinct result_sql='alter table '+rtrim(object_name(tableid))+' add constraint '<br />       +rtrim(object_name(constrid))+' foreign key('+<br />       +col_name(sysreferences.tableid,sysreferences.fokey1)+substring(',',1,sysreferences.fokey2)<br />       +col_name(sysreferences.tableid,sysreferences.fokey2)+substring(',',1,sysreferences.fokey3)<br />       +col_name(sysreferences.tableid,sysreferences.fokey3)+substring(',',1,sysreferences.fokey4)<br />       +col_name(sysreferences.tableid,sysreferences.fokey4)+substring(',',1,sysreferences.fokey5)<br />       +col_name(sysreferences.tableid,sysreferences.fokey5)+substring(',',1,sysreferences.fokey6)<br />       +col_name(sysreferences.tableid,sysreferences.fokey6)+substring(',',1,sysreferences.fokey7)<br />       +col_name(sysreferences.tableid,sysreferences.fokey7)+') '<br />       +'references '+rtrim(object_name(reftabid))+'('<br />       +col_name(sysreferences.reftabid,sysreferences.refkey1)+substring(',',1,sysreferences.refkey2)<br />       +col_name(sysreferences.reftabid,sysreferences.refkey2)+substring(',',1,sysreferences.refkey3)<br />       +col_name(sysreferences.reftabid,sysreferences.refkey3)+substring(',',1,sysreferences.refkey4)<br />       +col_name(sysreferences.reftabid,sysreferences.refkey4)+substring(',',1,sysreferences.refkey5)<br />       +col_name(sysreferences.reftabid,sysreferences.refkey5)+substring(',',1,sysreferences.refkey6)<br />       +col_name(sysreferences.reftabid,sysreferences.refkey6)+substring(',',1,sysreferences.refkey7)<br />       +col_name(sysreferences.reftabid,sysreferences.refkey7)+')' <br />       +char(10)+"go"<br />        from sysreferences,syscolumns,sysobjects <br />       where sysreferences.tableid=sysobjects.id<br />         and sysobjects.id=syscolumns.id<br />         and sysobjects.type='U' <br />       order by sysobjects.name<br />       go<br />       --生成删除参照的SQL语句<br />       select distinct result_sql='alter table '+rtrim(object_name(sysreferences.tableid))+' drop constraint '+rtrim(object_name(sysreferences.constrid))+char(10)+"go"<br />         from sysreferences,syscolumns,sysobjects <br />        where sysreferences.tableid=sysobjects.id<br />          and sysobjects.id=syscolumns.id<br />          and sysobjects.type='U'<br />        order by object_name(sysreferences.tableid)<br />       go<br /> <br />    4、关于表U锁<br />       --列出所有锁cd锁的?br />       select name<br />         from sysobjects<br />        where type='U'<br />          and sysstat2 & 57344 = 32768<br />          and name not like "XT%"<br />        order by name <br /> <br />       --调优的方法有Q调整锁cdQ调整表的聚烦?br />       --调整表锁cd锁,可以提高对表的ƈ发访问性能Q但是同时也会占用更多的pȝ资源<br />       --修改行锁的SQL语句Qalter table [table_name] lock [datarows|allpages]<br />       --<br />       --调整表的聚簇索引在数据插入时Q降低对表的最后一늚争用<br />       --Sybase规定一张表只能有一个聚烦引,所以在调整聚簇索引Ӟ要先删除原有的聚烦引,然后再徏立新?br />       --例如SB_ZSXX表的在ZSXH上聚烦引修改ؓ在NSRSBH上的聚簇索引.<br />       --删除原聚烦引PK_SB_ZSXX<br />       drop index SB_ZSXX.PK_SB_ZSXX<br />       go<br />       create  nonclustered index PK_SB_ZSXX on SB_ZSXX(ZSXH)<br />       go<br />       -- 建立IDX_SB_ZSXX_NSRSBH的聚烦?br />       drop index SB_ZSXX.IDX_SB_ZSXX_NSRSBH<br />       go<br />       create  clustered index IDX_SB_ZSXX_NSRSBH on SB_ZSXX(NSRSBH)<br />       go<br />       --以上的烦引信息可以用sp_help命o列出<br /> <br />    5、求出指定字D늭于指定值的记录?br />       declare @lc_colname varchar(30)<br />       --declare @lc_colvalue /*定义Ʋ求值的变量Q随着变量的类型定义不同的?/<br />       --取包含指定列名的?br />       select distinct name=object_name(id) into #AA from syscolumns where name = @lc_colname<br />       --生成SQLQ求出指定字D늭于指定值的记录?br />       select "insert into #BB select tname='"+name+"',cnt=count(*) from "+name+" where " + @lc_colname + "='" + @lc_colvalue + "'"+char(10)+"go"<br />         from #AA<br />       --q行SQL<br />       --查记录不为零的表Q既为求出的?br />       select * from #BB where cnt>0<br /> <br />    6、列出所有无主键的表<br />       select name from sysobjects<br />        where name not in (<br />                            SELECT object_name(id)<br />                            FROM   sysindexes<br />                            WHERE  indid > 0<br />                                   AND status2 & 2 = 2<br />                                   and status & 2048 = 2048<br />                          )<br />        and type="U"<br />      order by name<br /> <br />    7、关于用L?br />       --锁定用户<br />       select "sp_locklogin "+name+",'lock'"+char(10)+"go"<br />         from syslogins<br />        where name not like "%prim%"<br />          and name not like "%maint%"<br />          and name not like "sa"<br />        order by name<br /> <br />        --解除锁定的用?br />        select "sp_locklogin "+name+",'unlock'"+char(10)+"go"<br />         from syslogins<br />        where name not like "%prim%"<br />          and name not like "%maint%"<br />          and name not like "sa"<br />        order by name<br />    8、ؓctais_maint授权<br />       select "grant all on "+name+" to ctais_maint"+char(10)+"go" from sysobjects where type="U"<br /> <br />    9、整理出字段cd有text和image的表<br />       --textcd<br />       select distinct name=object_name(id)<br />         from syscolumns<br />        where type=35<br />          and id in (select id from sysobjects where type="U")<br />        order by object_name(id)<br /> <br />       --imagecd<br />       select distinct name=object_name(id)<br />         from syscolumns<br />        where type=34<br />          and id in (select id from sysobjects where type="U")<br />        order by object_name(id)<br /> <br />    10、修改identity列的最大?br />       --讄包含identity列的表ؓ可直接插入记?br />       set identity_insert [table] [on|off]<br />       --插入一个比较大的?br />       insert into [table] values([value])<br /> <img src ="http://www.aygfsteel.com/shanben/aggbug/216016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/shanben/" target="_blank">虎啸长沙,龙跃深圳.</a> 2008-07-19 12:40 <a href="http://www.aygfsteel.com/shanben/archive/2008/07/19/216016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>查寻提示改变优化?http://www.aygfsteel.com/shanben/archive/2008/07/16/215161.html虎啸长沙,龙跃深圳.虎啸长沙,龙跃深圳.Wed, 16 Jul 2008 03:23:00 GMThttp://www.aygfsteel.com/shanben/archive/2008/07/16/215161.htmlhttp://www.aygfsteel.com/shanben/comments/215161.htmlhttp://www.aygfsteel.com/shanben/archive/2008/07/16/215161.html#Feedback0http://www.aygfsteel.com/shanben/comments/commentRss/215161.htmlhttp://www.aygfsteel.com/shanben/services/trackbacks/215161.html在Sybase中我们可以象?a class="bluekey" target="_blank">Oracle那样l予查寻提示吗?如何做呢Q?br /> 发表?4q???/p>

  象Oraclepȝ那样Q在Sybase中优化器提示可以更改优化器。它们应当更慎重C用。当数据建模正确实行Q必要的索引存在Q及时地更新l计Q仔l编写代码后QASE优化器可以完成出色的优化工作?/p>

ASE允许你说明优化器改动如下Q?br /> [ SET FORCEPLAN ON ]

SELECT columns
  FROM table ( [ INDEX indid or name | PREFETCH size | MRU | LRU ] )
 WHERE columns = something

UPDATE table
   SET columns = something
  FROM table ( [ INDEX indid or name | PREFETCH size | MRU | LRU ] )
 WHERE columns = something

DELETE table
  FROM table ( [ INDEX indid or name | PREFETCH size | MRU | LRU ] )
 WHERE columns = something

[ SET FORCEPLAN OFF ]

指定索引

  通过用关键字INDEX及说明indid或烦引名UC可以强制使用特定的烦引,如果你必dq用一个烦引,你应当一直用索引名称而不是indid。这是因为indid是根据生成的ơ序分派l许多烦引,例行的数据库l护会改变indid?/p>

你也可以? INDEX 0 )来定义一个图表扫描。这意味着ASE要进行一ơ全图表扫描?/p>


强制索引
SELECT columns
  FROM table ( INDEX index_name )
 WHERE columns = something

UPDATE table
   SET columns = something
  FROM table ( INDEX index_name )
 WHERE columns = something

DELETE table
  FROM table ( INDEX index_name )
 WHERE columns = something

To force a Full Table Scan:
SELECT columns
  FROM table ( INDEX 0 )
 WHERE columns = something

UPDATE table
   SET columns = something
  FROM table ( INDEX 0 )
 WHERE columns = something

DELETE table
  FROM table ( INDEX 0 )
 WHERE columns = something


  象我们前面提到的Q用提CZ引v应用l护和最甲优化策略的应用问题Q如果你要强制实施烦引或图表扫描Q不要在应用代码内执行。用索引或图表扫描生成一个viewQ用view作ؓ图表。这你的l护方便很多Qƈ且指明了强制索引或图表扫描的对象?/p>

例如

CREATE
  VIEW vw_[index_name | scan]_test_table
AS
SELECT columns
  FROM table ( INDEX index_name | 0 )
go


q段语句讉K了图表,强制实施了一U方法,q可以用作view


例如

SELECT columns
  FROM vw_[index_name | scan]_table
 WHERE columns = something

UPDATE table
   SET columns = something
  FROM vw_[index_name | scan]_table
 WHERE columns = something

DELETE table
  FROM vw_[index_name | scan]_table
 WHERE columns = something

q接ơ序

用SET FORCEPLAN [ ON | OFF ]实施q接ơ序

  警告Q!Q实施连接次序会增加应用的维护工作。另外系l的发展也会产生一条更有效的途径?/p>

  Ҏ选项讑֮的SET FORCEPLAN ON all查寻用它们在查MFROM子句的次序来q接?/p>

例如
SET FORCEPLAN ON

SELECT t1.columns
  FROM table1 t1,
       table2 t2
 WHERE t1.column01 = t2.column01

SET FORCEPLAN OFF
go

  在前面的例子中,我们强制ASE在作为Outer图表的test_table1上进行扫描,Ҏl计情况q可能是一件很坏的事,只要非常熟练的DBA才能用这L逻辑来实施?br />



]]>
Sybase配置参数http://www.aygfsteel.com/shanben/archive/2008/07/09/213731.html虎啸长沙,龙跃深圳.虎啸长沙,龙跃深圳.Wed, 09 Jul 2008 09:32:00 GMThttp://www.aygfsteel.com/shanben/archive/2008/07/09/213731.htmlhttp://www.aygfsteel.com/shanben/comments/213731.htmlhttp://www.aygfsteel.com/shanben/archive/2008/07/09/213731.html#Feedback0http://www.aygfsteel.com/shanben/comments/commentRss/213731.htmlhttp://www.aygfsteel.com/shanben/services/trackbacks/213731.htmlSybase配置参数

sp_configure 'max online engines',4
go
--配置启动cpu个数
sp_configure 'number of engines at startup',4
go
--配置最大内存数
sp_configure 'max memory' ,2097151
go
--分配最大存储过E缓?br /> sp_configure 'procedure cache',102400
go
--配置高速缓?br /> sp_cacheconfig  'default data cache' , '700M'
go
--~省~存分配大?br /> sp_poolconfig 'default data cache','200M','16K'
go
--|络包大?br /> sp_configure 'max network packet size',1024
go

--最大连接数
sp_configure 'number of user connections',500
go
--最大打开对象
sp_configure  'number of open object',9000
go
--最大烦?br /> sp_configure  'number of open index',10000
go
--最大锁?br /> sp_configure  'number of locks',100000
go

--增加|络内存
--sp_configure  'additional network memory',1024
go

--锁内?br /> sp_configure  'lock shared memory',512
go

--优化tempdb
select dbid, name,segmap
from sysusages,  sysdevices
where sysdevices.low  <= sysusages.size +vstart
and sysdevices.high >=sysusages.size+vstart -1
and dbid =2
and (status=2 or status=3)
go
use tempdb
go
sp_dropsegment  'default',tempdb,master
go
sp_dropsegment  'logsegment',tempdb,master
go


select dbid, name,segmap
from sysusages,  sysdevices
where sysdevices.low  <= sysusages.size +vstart
and sysdevices.high >=sysusages.size+vstart -1
and dbid =2
and (status=2 or status=3)
go

sp_cacheconfig tempdb_cache, '100M'
go
sp_poolconfig tempdb_cache,'50M','16K'
go
sp_bindcache 'tempdb_cache',tempdb
go
sp_helpcache tempdb_cache

select name,id from syscharsets

dbcc traceon(3604)
dbcc memusage



1          数据库安装的优化
1.1          应用数据库用裸讑֤
若在UNIXQUNIXWAREQ操作系l下安装数据库服务器Q请SYBASE应用数据库的讑֤(device)安装成裸讑֤。即在创建应用数据库讑֤Q如QIVSPQDB160QNAP2000{)时用裸设备,把文件名指向 /dev/dsk/ 子目录下的相应文件。系l数据库讑֤Q如:master{)仍然指向文gpȝ?br /> 1.2          补丁E序
完成SYBASE数据库的安装Q请注意原版的SYBASE软g都会带有最新的补丁Q一定要把补丁打上,否则会出C些莫名其妙的问题。FOR NT 版的补丁是一个ZIP文gQ解压至C:\SYBASE子目录即可?br /> 1.3          安装 SYBASE 在线帮助
在安装好 SYBASE 后,在安装目录下有一文gQ?./scripts/ins_syn_sqlQ在服务器上执行该脚本:
Sybase for Unix版:     ./isql -Usa -P -i../scripts/ins_syn_sql
Sybase for Winnt版:    isql -Usa -P -i\sybase\scripts\ins_syn_sql
执行完毕后,卛_在Q意的 SYBASE 客户端上q接?SQL SERVER Q在U取得Q意命令的帮助Q?br />         sp_syntax "关键?
如:        sp_syntax "alter"        卛_列出所有包?alter"字符的命?br /> 2          数据库配|的优化
2.1          优化master数据?br /> 首先加大master讑֤I间Q初始默认ؓ30MQ加大ؓ150M。然后加大master数据库空_默认数据D和日志D各?M大小Q徏议改为数据段100MQ日志段50M?br /> alter database master on master=95
2.2          优化tempdb数据?br /> 首先创徏tempdb讑֤Q分配给tempdb数据库,默认tempdb数据库数据段和日志段各ؓ2M大小Qƈ创徏在master讑֤上,改ؓ数据D?00MQ日志段50MQ创建在tempdb讑֤上?br /> alter database tempdb on tempdb=200

SQL SEVRER所有用户都׃n工作表和临时表的tempdb数据库,tempdb主要瓉是磁盘I/0。解军_法是把tempdb攑֜更快的设备上。在UNIX环境中,把tempdb攑֜文gpȝ中而不用原始的讑֤。由于tempdb在创建数据时Q自动在master讑֤上创Zؓ2M的数据库Qؓ了减冲H,最好的办法是把tempdb从master讑֤中移走。ؓ了达Cq目的,可采用如下办法实玎ͼ

1Q在单用L态下启动SQL SERVER
启动单用h法:dataserver -dmaster.dat -m
2Q以sad
3Q在文gpȝ中创Z个哑数据库?br /> 4Q删除sysusages?sysdatabase表中对现有tempdb数据库的引用
5Q获取哑数据库的数据库IDQ相应修改sysusages?ysdatabase表对tempdb的引?br /> 6Q重新启动数据库
以在newdevice中创?00M的tempdb数据库ؓ例,执行q程如下Q?br /> create database newtemp on newdevice=200
go /* 创徏新的数据?*/
begin tran
go /* 开始事务,防止操作错误时破坏整个SQL SERVER的运?/
delete sysusages where dbid = 2
delete sysdatabases where dbid = 2
go /*删除pȝ表对tempdb的引用,只能在单用户状态下执行*/
select dbid from sysdatabases where name = ‘newtemp’

go /*获取newtemp数据库IDQ假定ؓ10*/

update sysusages set dbid = 2 where dbid=10

update sysdatabases set name=’tempdb’,dbid=2 where name=’newtemp’

go /*修改数据库的引用Q对newtemp的引用改为对tempdb的引?/

select name,dbid, from sysdatabases where name = ‘tempdb’

select * from sysusages where dbid = 2

go /*试修改是否正确Q正则提交Q否则可用rollback回退*/

commit tran

go /*修改成功Q重新启动系l?/

q种Ҏ只对tempdb有效Q其他数据库不能采用q种Ҏ。因为在SQL SERVER启动Ӟtempdb每次都重新初始化?br /> 2.3          优化pȝ参数
以下参数为标准徏议|可根据实际情况修攏V?br /> 优化pȝ参数的SQL脚本        注释
sp_configure 'total memory', 100000        优化数据库的内存Q应Ҏ不同机器配置讄, Z半的物理内存大小。以db_block为单位,x个单位ؓ2kQ上例ؓ200MQ默认ؓ24M.
sp_configure "lock scheme" , 1,"datarows"        pȝ默认U锁Q优化ؓ行锁
sp_configure "number of locks" , 10000        加大最大锁q程? 默认?000?br /> Q如果设|一个已l存在的?tabel)的锁方式锁,则执行:
alter table table_name lock datarowsQ?br /> sp_configure 'procedure cache percent' ,30        ~省|20 |procedure使用频率高时采用较大的|不超q?0
sp_configure "number of user connections",100        最大用戯接数Q默认ؓ25Q每个连接要?0k内存
sp_configure 'number of devices',20        最大设备文件数据改?5?br /> sp_configure ‘number of Open databases’,20        最大打开数据库个敎ͼ对于需在一台数据库服务上打个多个数据库则需加大此参敎ͼ默认?5
Sp_configure ‘max online engines CPU’,2        ~省|1 |采用实际机器的CPU个数
Sp_configure ‘total data cache size’,60000        ~省|0 |使用SQL SERVER内存?0%
如果上述参数改动后SYBASE启动不正常,则可查SYBASE的错误日志,把SYBASE.cfg中的相应选项修改的倹{?br /> 附:SYBASE SQL SERVER 内存的分?br />          1. SQL SERVER 可执行代?nbsp;       3-4M
         2. SQL SERVER 使用的静态内?nbsp;       2.2-3.25M
         3. 用户可配|的参数所占用内存Q以下示?11.9.2?Q?br />                                                                                 默认?nbsp;               占用内存
            用户q接?user connections)        25                每个 U?0k
            打开的数据库?open database)        12                每个 U?0k
            打开的对象数(open objects)                500                每个 U?k
            打开的烦引数(open indexs)                500                每个 U?k
            锁数?locks)                                        5000        每个 U?.1k
            数据库设备数(data device)                10                每个 U?.5k
         4. 剩余部䆾分配l?br />             q程~存 ( ?procedure cache percent 军_Q默认gؓ 20% )
            数据~存 ( 默认gؓ减去1??的 80% )
2.4          优化数据库系l属?br /> 在sybase center中选择数据库属性,属性中options选项中的下列目选中?br /> allow select into/bulk copy
truncate log on checkpoint
checkpoint on recovery
abort transction on full log
free space accounting
allow nulls by default
auto identity column in non-unquie index
Ҏ二:在SQLPLUS中执行下列SQL脚本
如:
sp_dboption mydb,"abort tran on log full",trueQ设定当数据库的日志I间满时Q就l止该进E,使用 sa 用户Q?br /> sp_dboption mydb," select into/bulkcopy ",true
sp_dboption mydb," trunc log on chkpt ",true
sp_dboption mydb," no chkpt on recovery",true
sp_dboption mydb," no free space acctg ",true
sp_dboption mydb,"allow nulls by default",true
sp_dboption mydb," auto identity dbo use only ",true
2.5          创徏阈值存储过E?br /> 可根据不同的应用修改以下脚本或创建多个阈值存储过E,q在配置阈值时指定相应的存储过E?br />    create procedure sp_thresholdaction
   @dbname varchar(30),@segmentname varchar(30), @free_space int,@status int  
            as dump transaction @dbname with no_log
print "LOG DUMP: '%1!' for '%2!' dumped",@segmentname,@dbname
go
2.6          配置多个阈?br /> Ҏ一Q?
        打开 Sybase CentralQ双ȝ应数据库(database)的段 Segments ->; logsegmentQ在        Thresholds 面中可讄自动清除日志的阀倹{其中有 Last Chance 的一行是pȝ默认的最后机会阀|即系l日志空闲空间小于该值时为最后一ơ自动清除日志的Z。设|时阀值的大小可设为日志ȝ间大的20%左右?br /> 另外再增加多个阈倹{?br /> Ҏ二:
1、用如下指令查出数据库中日志的定wQ用表C)
select sum(size) from master..sysusages where dbid=db_id("database_name" and (segmap&4)=4
2、用sp_addthreshold增加新的阈|大小为日志容量的50%,如上面语句显Cgؓ2048
sp_addthreshold database_name,logsegment,1024Qproc_dump_display
注意Q因一个大事务时可能会过当前的thresholdQ所以必d多个thresholdQ?br /> 使用命oselect @@thresh_hysteresis查看数据库的滞后|如结果ؓ64,则下一个阈D?最q的阈?Q?*64Q?Q请在所N值再按这U原则各增加两个更小的阈倹{?br /> 3          索引的优?br /> 在良好的数据库设计基上,需高效C用烦引,q经常的l护索引Q下文介l关于烦引的相关内容?br /> 3.1          创徏索引
索引分ؓ三类Q聚烦?clustered indexes)、非聚簇索引(nonclustered indexes)、覆盖烦?covering indexes)
鉴于索引加快了查询速度Q但减慢了数据更新速度的特炏V可通过在一个段上徏表,而在另一个段上徏光聚簇索引Q而这两段分别在单独的物理讑֤上来改善操作性能?br /> create [unique][clustered|nonclustered] index index_name on table_name(column_name...)
3.2          重徏索引
  随着数据行的插入、删除和数据늚分裂Q有些烦引页可能只包含几|据,另外应用在执行大块I/O的时候,重徏非聚烦引可以降低分片,l护大块I/O的效率。重建烦引实际上是重新组lB-树空间。在下面情况下需要重建烦引:
  (1)、数据和使用模式大幅度变化?br />   (2)、排序的序发生改变?br />   (3)、要q行大量插入操作或已l完成?br />   (4)、用大块I/O的查询的盘L数比预料的要多?br />   (5)、由于大量数据修改,使得数据和索引|有充分用而导致空间的使用出估算?br />   (6)、dbcc查出索引有问题?br />   当重烦引时,q张表的所有非聚簇索引被重徏.
3.3          索引l计信息的更?br />   当在一个包含数据的表上创徏索引的时候,SQL Server会创建分布数据页来存放有关烦引的两种l计信息Q分布表和密度表。优化器利用q个|判断该烦引对某个特定查询是否有用。但q个l计信息q不动态地重新计算。这意味着Q当表的数据改变之后Q统计信息有可能是过时的Q从而媄响优化器q求最有工作的目标。因此,在下面情况下应该q行update statistics命oQ?br />   (1)、数据行的插入和删除修改了数据的分布?br />   (2)、对用truncate table删除数据的表上增加数据行?br />   (3)、修改烦引列的倹{?br /> 4          查询优化
4.1          NOT IN子句
不知大家是否喜欢使用‘NOT IN’q样的操作,如果是,那尽量?NOT) EXISTS 替代?br /> 例子Q?br /> 语句1
SELECT dname, deptno FROM dept  WHERE deptno NOT IN (SELECT deptno FROM emp);
语句2
SELECT dname, deptno FROM dept WHERE NOT EXISTS (SELECT deptno FROM emp WHERE dept.deptno = emp.deptno);
明显的,2要比1的执行性能好很多,因ؓ1中对empq行了full table scan,q是很浪Ҏ间的操作。而且1中没有用到emp的indexQ因为没有where子句。?中的语句对empq行的是range scan?br /> 4.2          量查询
在v量查询时量用格式转换?br /> 如用
WHERE a.order_no = b.order_no
而不?br /> WHERE TO_NUMBER (substr(a.order_no, instr(b.order_no, '.') - 1)= TO_NUMBER (substr(a.order_no, instr(b.order_no, '.') - 1)
3Q查询v量数据是可以使用optimizer hintsQ例?*+ORDERED */
?br /> SELECT /*+ FULL(EMP) */ E.ENAME FROM EMP E WHERE E.JOB = 'CLERK';
而不?br /> SELECT E.ENAME FROM EMP E WHERE E.JOB || '' = 'CLERK';



对于数据量较大和业务功能较复杂的pȝQSybase的默认参数根本无法满需要,必须q行优化。系l数据库斚w的优化从两方面进行,一个是调整数据库系l的一些性能参数的|另一个是应用E序的调优。应用程序的调优调整hsql和sql的写法,配合sql合理的徏索引Q这里主要对Sybasepȝ一些基本的性能参数的调优进行一个小l?

1、内?br />    内存是对性能影响最大,也是最需要也是最难调优的地方。内存调优一定要Q常用的需要调整的参数有:

sp_configure “max memory”,0,”2600M” (讄为共享内存的75%,重启生效)
sp_configure “allocate max shared mem”,1 (启动的时候自动分配max memory指定的最大内?
sp_cacheconfig “default data cache”,”1300m”(讄数据~存为max memory的一?
sp_cacheconfig “default data cache”,”cache_partition=2″
sp_configure “procedure cache size”,102400 (q程高速缓?通常是max mem20%-30%,q里?00M,在大量的执行sql的时候这个参C定要调大)
sp_cacheconfig ‘tempdb_cache’,'100m’,'mixed’ (创徏一?00M命名高速缓存tempdb_cacheltemdpb使用)
sp_bindcache ‘tempdb_cache’,tempdb (tempdb_cachel定到tempdb)

   实际中遇C个很头痛的问题, 32位Windows版本的Sybase 最大内存只能到搞到3G左右Q?default data cache"的Dq?1500M Sybase实例pv不来了,D服务器的16G内存形同虚设Q所以如果大家的目和我q个cMQ服务器和操作系l由客户提供Q还换不了的Q内存不妨要求个4G够了,多了也浪贏V?/p>

2、CPU
   当服务器的CPU个数多于一个时Q可以考虑多CPU。实际上对于OS会自动调度,设一下只不过是控制的更精一炏V实际需要根据CPU数来修改Q若CPU=NQ一般设|ؓN-1。设|这个参敎ͼ比如我的服务?个CPU, 像下面q样讄Q?/p>

sp_configure “max online engines”,7
sp_configure “number of engines at startup”,7
sp_configure “max parallel degree”,1 (q行的度Q大于或{于1)
sp_configure “number of worker processes”,7 (q行度*q发q接敎ͼ1.5?

3、连接数(q个没什么说的,数量够可以,默认Cؓ25Q可Ҏ应用需要来修改?
sp_configure “number of user connections”,600

查询数据库死q程
select * from master..syslogshold

4、锁
   数据库的锁机制其实是一个比较复杂的话题Q这里只能简单说一下。Sybase数据库系l两个别的锁机Ӟ所有页锁、数据页锁。所有页锁在当数据库加锁Ӟ既锁数据,也锁索引;数据锁当数据库加锁Ӟ只锁数据,不锁索引c?br />    Sybase支持三种cd的锁: 数据表锁、数据页锁、数据行锁?一些常用的调优命o和策略如?

sp_configure "number of locks",50000 Q设|锁的数量)
    pȝ讄时要把锁的数量设大一点,单说是要管够;如果需要节省空_减少l护量,使用所有页锁机Ӟ而如果需要加快速度Q空间够,使用数据锁机制?/p>

   sp_sysmon “00:10:00”,locks Q检表的用情况)
   当通过监测发现锁竞争超q?5%Ӟ首先修改加锁最重的表的锁机Ӟ然后再把数据锁讄为数据行锁。如果发现螺旋锁多,则ؓ该表建立单独的命名缓存ƈ对命名缓存进行分区?/p>

5、I/O
   数据库调优ȝ思\是尽量减和分散物理I/OQ尽量减网lI/O?/p>

   减少物理I/O的办法有Q?在命名缓存中增加大块的I/O~冲池,把数据分散到多个盘?采用RAID技?建立D,使一个表跨越多个盘{等Q基本和其他的数据库软g调优一栗?br />    减少|络I/O的办法是采用大数据包?br /> sp_configure "default network packet size",2048 讄|络传送包的大?需要重启动)
sp_configure "max network packet size",2048

6、设备调?br />    主要调整两块Q?一个是业务数据库的数据讑֤与日志设备必d开Q添加时数据库讑֤Q另一个是调整TempdbQ这一条很重要却很Ҏ被大家忽视?br />    Tempdb是sybase数据库当中的临时库,用于存放中间l果和时表。由于用很频繁而默认大又很小Q我们需要加大其讑֤I间和库的大,可能把tempdb攄到最快的盘上,q徏立单独的命名~存?br /> sp_cacheconfig ‘tempdb_cache’,'200m’,'mixed’ (创徏一?00M命名高速缓存tempdb_cacheltemdpb使用)
sp_bindcache ‘tempdb_cache’,tempdb (tempdb_cachel定到tempdb)



]]>
Sybase 常用sql语句http://www.aygfsteel.com/shanben/archive/2008/07/08/213244.html虎啸长沙,龙跃深圳.虎啸长沙,龙跃深圳.Tue, 08 Jul 2008 02:31:00 GMThttp://www.aygfsteel.com/shanben/archive/2008/07/08/213244.htmlhttp://www.aygfsteel.com/shanben/comments/213244.htmlhttp://www.aygfsteel.com/shanben/archive/2008/07/08/213244.html#Feedback0http://www.aygfsteel.com/shanben/comments/commentRss/213244.htmlhttp://www.aygfsteel.com/shanben/services/trackbacks/213244.html常用sql语句

1. 查看数据库的版本
select @@version

2. 查看数据库所在机器操作系l参?
exec master..xp_msver

3. 查看数据库启动的参数
sp_configure

4. 查看数据库启动时?
select convert(varchar(30),login_time,120) from master..sysprocesses where spid=1
查看数据库服务器名和实例?
print 'Server Name...............Q? + convert(varchar(30),@@SERVERNAME)
print 'Instance..................Q? + convert(varchar(30),@@SERVICENAME)

5. 查看所有数据库名称及大?
sp_helpdb
重命名数据库用的SQL
sp_renamedb 'old_dbname', 'new_dbname'

6. 查看所有数据库用户d信息
sp_helplogins
查看所有数据库用户所属的角色信息
sp_helpsrvrolemember
修复q移服务器时孤立用户?可以用的fix_orphan_user脚本或者LoneUserq程
更改某个数据对象的用户属?
sp_changeobjectowner [@objectname =] 'object', [@newowner =] 'owner'
注意Q更改对象名的Q一部分都可能破坏脚本和存储q程?
把一台服务器上的数据库用L录信息备份出来可以用add_login_to_aserver脚本
查看某数据库?对象U用h?
sp_helprotect

7. 查看链接服务?
sp_helplinkedsrvlogin
查看q端数据库用L录信?
sp_helpremotelogin

8.查看某数据库下某个数据对象的大小
sp_spaceused @objname
q可以用sp_toptablesq程看最大的N(默认?0)个表
查看某数据库下某个数据对象的索引信息
sp_helpindex @objname
q可以用SP_NChelpindexq程查看更详l的索引情况
SP_NChelpindex @objname
clustered索引是把记录按物理顺序排列的Q烦引占的空间比较少?
寚w值DML操作十分频繁的表我徏议用非clustered索引和约束,fillfactor参数都用默认倹{?
查看某数据库下某个数据对象的的约束信?
sp_helpconstraint @objname

9.查看数据库里所有的存储q程和函?
use @database_name
sp_stored_procedures
查看存储q程和函数的源代?
sp_helptext '@procedure_name'
查看包含某个字符串@str的数据对象名U?
select distinct object_name(id) from syscomments where text like '%@str%'
创徏加密的存储过E或函数在AS前面加WITH ENCRYPTION参数
解密加密q的存储q程和函数可以用sp_decryptq程

10.查看数据库里用户和进E的信息
sp_who
查看SQL Server数据库里的活动用户和q程的信?
sp_who 'active'
查看SQL Server数据库里的锁的情?
sp_lock
q程?--50是SQL Serverpȝ内部用的,q程号大?0的才是用Lq接q程.
spid是进E编?dbid是数据库~号,objid是数据对象编?
查看q程正在执行的SQL语句
dbcc inputbuffer ()
推荐大家用经q改q后的sp_who3q程可以直接看到q程q行的SQL语句
sp_who3
查死锁用sp_who_lockq程
sp_who_lock

11.查看和收~数据库日志文g的方?
查看所有数据库日志文g大小
dbcc sqlperf(logspace)
如果某些日志文g较大Q收~简单恢复模式数据库日志Q收~后@database_name_log的大单位ؓM
backup log @database_name with no_log
dbcc shrinkfile (@database_name_log, 5)

12.分析SQL Server SQL 语句的方法:
set statistics time {on | off}
set statistics io {on | off}
囑Ş方式昄查询执行计划
在查询分析器->查询->昄估计的评估计?D)-Ctrl-L 或者点dh里的囑Ş
文本方式昄查询执行计划
set showplan_all {on | off}
set showplan_text { on | off }
set statistics profile { on | off }

13.出现不一致错误时QNT事g查看器里?624号错误,修复数据库的Ҏ
先注释掉应用E序里引用的出现不一致性错误的表,然后在备份或其它机器上先恢复然后做修复操?
alter database [@error_database_name] set single_user
修复出现不一致错误的?
dbcc checktable('@error_table_name',repair_allow_data_loss)
或者可惜选择修复出现不一致错误的型数据库名
dbcc checkdb('@error_database_name',repair_allow_data_loss)
alter database [@error_database_name] set multi_user
CHECKDB ?个参敎ͼ
repair_allow_data_loss 包括对行和页q行分配和取消分配以Ҏ分配错误、结构行或页的错误,以及删除已损坏的文本对象Q这些修复可能会D一些数据丢失?
修复操作可以在用户事务下完成以允许用户回滚所做的更改?
如果回滚修复Q则数据库仍会含有错误,应该从备份进行恢复?
如果׃所提供修复{的缘故遗漏某个错误的修复Q则遗漏Q何取决于该修复的修复?
修复完成后,请备份数据库?
repai*_**st q行的、不耗时的修复操作,如修复非聚集索引中的附加键?
q些修复可以很快完成Qƈ且不会有丢失数据的危险?
repair_rebuild 执行?repai*_**st 完成的所有修复,包括需要较长时间的修复Q如重徏索引Q?
执行q些修复时不会有丢失数据的危险?


d、删除、修改用db.Execute(Sql)命o执行操作
?-------------------?
?数据记录{??
?-------------------?
注意Q单双引L用法可能有误(没有式)

Sql = "Select Distinct 字段?From 数据?
Distinct函数Q查询数据库存表内不重复的记?

Sql = "Select Count(*) From 数据?where 字段?>#18:0:0# and 字段?< #19:00# "
count函数,查询数库表内有多条记录Q?#8220;字段?”是指同一字段
例:
set rs=conn.execute("select count(id) as idnum from news")
response.write rs("idnum")

sql="select * from 数据?where 字段?between ? and ?"
Sql="select * from 数据?where 字段?between #2003-8-10# and #2003-8-12#"
在日期类数gؓ2003-8-10 19:55:08 的字D里查找2003-8-10?003-8-12的所有记录,而不是几点几分?

select * from tb_name where datetime between #2003-8-10# and #2003-8-12#
字段里面的数据格式ؓQ?003-8-10 19:55:08Q通过sql查出2003-8-10?003-8-12的所有纪录,而不是几点几分?

Sql="select * from 数据?where 字段?字段?order by 字段?[desc]"

Sql="select * from 数据?where 字段?like '%字段?' order by 字段?[desc]"
模糊查询

Sql="select top 10 * from 数据?where 字段?order by 字段?[desc]"
查找数据库中?0记录

Sql="select top n * form 数据?order by newid()"
随机取出数据库中的若q条记录的方?
top nQn是要取出的记录?

Sql="select * from 数据?where 字段?in ('?','?','?')"

?-------------------?
?d数据记录 ?
?-------------------?
sql="insert into 数据?(字段1,字段2,字段3 …) valuess (?,?,? …)"

sql="insert into 数据?valuess (?,?,? …)"
不指定具体字D名表示按照数据表中字D늚序Q依ơ添?

sql="insert into 目标数据?select * from 源数据表"
把源数据表的记录d到目标数据表

?-------------------?
?更新数据记录 ?
?-------------------?
Sql="update 数据?set 字段?字段?where 条g表达?

Sql="update 数据?set 字段1=?,字段2=? …… 字段n=值n where 条g表达?

Sql="update 数据?set 字段1=?,字段2=? …… 字段n=值n "
没有条g则更新整个数据表中的指定字段?

?-------------------?
?删除数据记录 ?
?-------------------?
Sql="delete from 数据?where 条g表达?

Sql="delete from 数据?
没有条g删除数据表中所有记?

?-------------------------?
?数据记录l计函数 ?
?-------------------------?
AVG(字段? 得出一个表格栏q_?
COUNT(*|字段? Ҏ据行数的l计或对某一栏有值的数据行数l计
MAX(字段? 取得一个表格栏最大的?
MIN(字段? 取得一个表格栏最的?
SUM(字段? 把数据栏的值相?

引用以上函数的方法:
sql="select sum(字段? as 别名 from 数据?where 条g表达?
set rs=conn.excute(sql)
?rs("别名") 获取l的计|其它函数q用同上?

?----------------------------?
?数据表的建立和删??
?----------------------------?
CREATE TABLE 数据表名U?字段1 cd1(长度),字段2 cd2(长度) …… )
例:CREATE TABLE tab01(name varchar(50),datetime default now())
DROP TABLE 数据表名U?(怹性删除一个数据表)

?-------------------------?
?记录集对象的Ҏ ?
?-------------------------?
rs.movenext 记录指针从当前的位|向下移一?
rs.moveprevious 记录指针从当前的位|向上移一?
rs.movefirst 记录指针移到数据表W一?
rs.movelast 记录指针移到数据表最后一?
rs.absoluteposition=N 记录指针移到数据表WN?
rs.absolutepage=N 记录指针移到第N늚W一?
rs.pagesize=N 讄每页为N条记?
rs.pagecount Ҏ pagesize 的设|返回总页?
rs.recordcount q回记录L
rs.bof q回记录指针是否出数据表首端,true表示是,false为否
rs.eof q回记录指针是否出数据表末端,true表示是,false为否
rs.delete 删除当前记录Q但记录指针不会向下Ud
rs.addnew d记录到数据表末端
rs.update 更新数据表记?br />
14.查询数据库死q程
select * from master..syslogshold



]]>
数据cd的不匚w可能会导致烦引失?/title><link>http://www.aygfsteel.com/shanben/archive/2008/07/07/213040.html</link><dc:creator>虎啸长沙,龙跃深圳.</dc:creator><author>虎啸长沙,龙跃深圳.</author><pubDate>Mon, 07 Jul 2008 07:02:00 GMT</pubDate><guid>http://www.aygfsteel.com/shanben/archive/2008/07/07/213040.html</guid><wfw:comment>http://www.aygfsteel.com/shanben/comments/213040.html</wfw:comment><comments>http://www.aygfsteel.com/shanben/archive/2008/07/07/213040.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/shanben/comments/commentRss/213040.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/shanben/services/trackbacks/213040.html</trackback:ping><description><![CDATA[   Sybase和SQL Server在这一点上有所不同Q如果条件比较中的数据类型不匚w的话Q可能会引v索引失效Q导致潜在的Performance问题?br />        单说明如下:<br />        <div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 98%; padding-top: 4px; border-bottom: windowtext 0.5pt solid"> <div><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">Create</span><span style="color: #000000"> </span><span style="color: #0000ff">Table</span><span style="color: #000000"> Test(<br /> <img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" alt="" />c1 </span><span style="font-weight: bold; color: #000000">int</span><span style="color: #000000"> </span><span style="color: #808080">not</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">,<br /> <img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" alt="" />c2 </span><span style="font-weight: bold; color: #000000">money</span><span style="color: #000000"> </span><span style="color: #0000ff">default</span><span style="color: #000000"> </span><span style="font-weight: bold; color: #800000">0</span><span style="color: #000000">,<br /> <img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" alt="" />c3 </span><span style="font-weight: bold; color: #000000">varchar</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">20</span><span style="color: #000000">),<br /> <img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">constraint</span><span style="color: #000000"> PK_Test </span><span style="color: #0000ff">primary</span><span style="color: #000000"> </span><span style="color: #0000ff">key</span><span style="color: #000000">(c1))<br /> <img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">go</span><span style="color: #000000"><br /> <img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" alt="" /><br /> <img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">create</span><span style="color: #000000"> </span><span style="color: #0000ff">index</span><span style="color: #000000"> ind_c2_Test </span><span style="color: #0000ff">on</span><span style="color: #000000"> Test(c2)<br /> <img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">go</span></div> </div> <p>插入一些数据后Q我们可以测试如下:<br /> 1> set showplan on<br /> 2> go<br /> 1> declare @var_int int<br /> 2> select @var_int=2<br /> 3> select * from Test where <a href="mailto:c1=@var_int">c1=@var_int</a><br /> 4> go</p> <p>QUERY PLAN FOR STATEMENT 1 (at line 1).</p> <p><br />     STEP 1<br />         The type of query is DECLARE.</p> <p><br /> QUERY PLAN FOR STATEMENT 2 (at line 2).</p> <p><br />     STEP 1<br />         The type of query is SELECT.</p> <p><br /> QUERY PLAN FOR STATEMENT 3 (at line 3).</p> <p><br />     STEP 1<br />         The type of query is SELECT.</p> <p>        FROM TABLE<br />             Test<br />         Nested iteration.<br />         Using Clustered Index.<br />         Index : PK_Test<br />         Forward scan.<br />         Positioning by key.<br />         Keys are:<br />             c1  ASC<br />         Using I/O Size 2 Kbytes for data pages.<br />         With LRU Buffer Replacement Strategy for data pages.</p> <p>(1 row affected)<br />  c1          c2                       c3<br />  ----------- ------------------------ --------------------<br />            2                   129.14 Hellen</p> <p>(1 row affected)<br /> 我们看到Qsybase的执行计划会使用clustered index来读取数据?br /> <br /> 下面Q采用moneycd来进行测?br /> 1> declare @var_money money<br /> 2> select @var_money=2<br /> 3> select * from Test where <a href="mailto:c1=@var_money">c1=@var_money</a><br /> 4> go</p> <p>QUERY PLAN FOR STATEMENT 1 (at line 1).</p> <p><br />     STEP 1<br />         The type of query is DECLARE.</p> <p><br /> QUERY PLAN FOR STATEMENT 2 (at line 2).</p> <p><br />     STEP 1<br />         The type of query is SELECT.</p> <p><br /> QUERY PLAN FOR STATEMENT 3 (at line 3).</p> <p><br />     STEP 1<br />         The type of query is SELECT.</p> <p>        FROM TABLE<br />             Test<br />         Nested iteration.<br />         Table Scan.<br />         Forward scan.<br />         Positioning at start of table.<br />         Using I/O Size 2 Kbytes for data pages.<br />         With LRU Buffer Replacement Strategy for data pages.</p> <p>(1 row affected)<br />  c1          c2                       c3<br />  ----------- ------------------------ --------------------<br />            2                   129.14 Hellen</p> <p>(1 row affected)<br /> <br /> 我们可以看到Qsybase没有采用索引Q而是采用了全表扫描?br /> <br /> 实际上,Sybaseq不是类型不一致就一定不会用烦引,而是有一个匹配原则,原则上是只要索引列的cd优先U高于搜索条件的数据cdQ就会用烦引?br /> q个优先U,可以通过查询pȝ表master.dbo.systypes.<br /> 1> select hierarchy,name from master.dbo.systypes<br /> 2> order by 1<br /> 3> go<br />  hierarchy name<br />  --------- ------------------------------<br />          1 floatn<br />          2 float<br />          3 datetimn<br />          4 datetime<br />          5 real<br />          6 numericn<br />          7 numeric<br />          8 decimaln<br />          9 decimal<br />         10 moneyn<br />         11 money<br />         12 smallmoney<br />         13 smalldatetime<br />         14 intn<br />         15 int<br />         16 smallint<br />         17 tinyint<br />         18 bit<br />         19 univarchar<br />         20 unichar<br />         22 sysname<br />         22 varchar<br />         22 nvarchar<br />         23 char<br />         23 nchar<br />         24 timestamp<br />         24 varbinary<br />         25 binary<br />         26 text<br />         27 image<br />         99 extended type<br /> </p> <img src ="http://www.aygfsteel.com/shanben/aggbug/213040.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/shanben/" target="_blank">虎啸长沙,龙跃深圳.</a> 2008-07-07 15:02 <a href="http://www.aygfsteel.com/shanben/archive/2008/07/07/213040.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>大表清理Ҏhttp://www.aygfsteel.com/shanben/archive/2008/07/06/212912.html虎啸长沙,龙跃深圳.虎啸长沙,龙跃深圳.Sun, 06 Jul 2008 13:43:00 GMThttp://www.aygfsteel.com/shanben/archive/2008/07/06/212912.htmlhttp://www.aygfsteel.com/shanben/comments/212912.htmlhttp://www.aygfsteel.com/shanben/archive/2008/07/06/212912.html#Feedback0http://www.aygfsteel.com/shanben/comments/commentRss/212912.htmlhttp://www.aygfsteel.com/shanben/services/trackbacks/212912.html ASE+SYB12.0   一個大表AAA ׃億多條記?21GQ加索引的大)

-->
Ҏ是最快的Q不過要更改server的一些參數,如果相應的參數沒有更改,׃一定了?br /> 1Qsp_poolconfig 'default data cache',"7G","16K","2K"
     Q-Q-?6K?G大小的default cache
     select into Q大部分的查詢(包括Q全表掃瞄,使用聚集索引的範圍查詢, order by{)使用16K的I/O能獲得更好的性能?br />     [color=red]增加16K R存的大,能明提?select into"的速度Q[/color]


2Qsp_configure 'max online engines,7
     Q-Q-Adaptive Server 聯機引擎的最大數Q不能超過cpu?br />    sp_configure 'number of worker processes',7
    Q-Q同步運行並行的i合查詢可用的工作進程的最大數Q小於等方{max online"?br />    sp_configure 'max parallel degree',7
    Q-Q最大並行度Q全服務器範圍每個查詢允a׃用的工作進程的最大數目,於{於「worker processes"?br />    sp_configure 'max scan parallel degree',7
    Q-基於散列掃瞄的最大並行度Q小於等方{worker processes"?br />    [color=red]以上參數提高並發度[/color]

3Qsp_configure 'number of sort buffers',20000
    Q-Q指定在排序時所用的2KR衝區的數目。說明了有多m衝區可以用來存放輸入表的數據頁?br />    [color=red]創徏一個很大的索引Q而SQL Server上其他的操作又很時Q設|該參數可以提高create index 的性能。[/color]


調整以上參數後,採用select into到臨時表Qdrop原表Qrename臨時表,建烦引是比較快的?br /> 比bcp快!bcpZ慢Q回L慢!

]]>
SYBASE建立索引的原?/title><link>http://www.aygfsteel.com/shanben/archive/2008/07/05/212764.html</link><dc:creator>虎啸长沙,龙跃深圳.</dc:creator><author>虎啸长沙,龙跃深圳.</author><pubDate>Sat, 05 Jul 2008 10:45:00 GMT</pubDate><guid>http://www.aygfsteel.com/shanben/archive/2008/07/05/212764.html</guid><wfw:comment>http://www.aygfsteel.com/shanben/comments/212764.html</wfw:comment><comments>http://www.aygfsteel.com/shanben/archive/2008/07/05/212764.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/shanben/comments/commentRss/212764.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/shanben/services/trackbacks/212764.html</trackback:ping><description><![CDATA[建立Clustered索引原则Q?br /> 1、Primary keyQ但必须满以下条gQA、常用于Where条gQB、插入记录时的字D值是随机的(不能用于序增加的字D,否则增加最后一个数据页的lock{待旉Q?br /> 2、用于范围查询的字段Q如 col1 between 100 and 200; col12>;62 and <70;<br /> 3、用于order by的字D?br /> 4、不l常改变QupdateQ的字段<br /> 5、用于连接条件的字段<br /> 其他有关建立索引的原则:<br /> 1、如果烦引是唯一的,其定义为Unique<br /> 2、如果用引用表索引Qforeign key ... referenceQ,被引用的列必d立唯一索引<br /> 3、如果徏立烦引的表有频繁的插入(InsertQ操作,使用fillfactor减少数据늚分裂、提高ƈ发性能q减死?br /> 4、如果在一个只读表上徏立烦引,其fillfactor设ؓ100以尽可能压羃数据和烦引空?br /> 5、尽可能减少单个索引的长?br /> 6、在满使用的前提下Q尽可能使用容量的数据cdQ如用numeric代替charQ?br /> 7、数|numericQ的比较在内部操作上比字W(stringQ略?br /> 8、变长字W串QvarcharQ和二进ӞbinaryQ类型比定长Qfixed-lengthQ类型需要更多的pȝ负蝲<br /> 9、只要可能,使用定长Qfixed-lengthQ、非I(non-nullQ、短QshortQ的数据cd字段作ؓ索引<br /> 10、连接条件两端的索引必须是兼容的Q最好是同一cdQ,如果需要进行数据{换的话,q接索引不能发挥作?br /> 建立复合字段索引的原?br /> 1、当条g内不包含复合索引的第一个字D|Q有两种可能QA、当所有select的字D均包含在复合烦引内Ӟ做所有烦引页的遍历查询,B、当select中包含非复合索引字段Ӟ做全表数据页的遍历查询,既此时烦引对索无效?br /> 2、复合烦引优点:A、提供烦引覆盖(index coveringQ的ZQ但仅限于所有查询(selectQ字D均包含在烦引内QB、当查询条g使用到复合烦引的所有字D|Q所需要时间少于这些字D徏立单独烦引的情况QC、复合烦引有利于强制多个属性合q后的唯一性限?br /> 3、复合烦引缺点:A、需要更多的索引I间Q减每个烦引页包含的烦引记录数Qƈ增加索引|目,B、对复合索引中Q何一个字D늚变化Qupdate或insertQ都会更新烦引,因此复合索引必须选择不进行变化的字段l成<br /> 4、差的复合烦引特点:A、复合烦引长度接q于记录长度QB、复合烦引中只有量字段用于查询<br /> <table class="tableborder" cellspacing="1" cellpadding="4" width="95%" align="center"> <!-- <tr><td bgcolor="#f0f3fa"><table cellspacing="0" cellpadding="0" width="100%"><td class="bold">ZealeS</td><td align="right">2004-12-21 12:48</td></tr></table></td></tr>--> <tbody> <tr> <td bgcolor="#def7ff"><img height="18" src="http://www.lslnet.com/images/icon_new.gif" width="29" border="0" alt="" /><strong>SYBASE建立索引的原?/strong><br /> <br /> 补充一点:<br /> <br />         --创徏非聚集烦?br /> <br />         1.满查询条g的数据不过20% <br />         <br />         2.能实?index covering<br />         <br />         3.用于集函数、连接、group by和order by的列<br />         <br />         4.要权衡烦引对查询速度的加快与降低修改速度之间的利?br /> <br /> <br /> --删除影响性能的烦?br />         <br />         如果一个应用在白天执行数据修改Q在夜间生成报表Q?br />         <br />         需要在早晨删除索引Q在晚上再把索引重徏h?br />         <br />         另外许多pȝ设计者创多优化器很少使用的烦引,<br />         <br />         可以ҎshowplanQ把没有用的索引删除?/td> </tr> </tbody> </table> <img src ="http://www.aygfsteel.com/shanben/aggbug/212764.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/shanben/" target="_blank">虎啸长沙,龙跃深圳.</a> 2008-07-05 18:45 <a href="http://www.aygfsteel.com/shanben/archive/2008/07/05/212764.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sybase性能优化l验谈!http://www.aygfsteel.com/shanben/archive/2008/07/05/212755.html虎啸长沙,龙跃深圳.虎啸长沙,龙跃深圳.Sat, 05 Jul 2008 09:44:00 GMThttp://www.aygfsteel.com/shanben/archive/2008/07/05/212755.htmlhttp://www.aygfsteel.com/shanben/comments/212755.htmlhttp://www.aygfsteel.com/shanben/archive/2008/07/05/212755.html#Feedback0http://www.aygfsteel.com/shanben/comments/commentRss/212755.htmlhttp://www.aygfsteel.com/shanben/services/trackbacks/212755.html

首先Q有一句话要认?Q?80%的性能问题由SQL语句引v?br />
l过?SYBASE 的书Q结合从 MSSQL q移q来的系l过E?Q发C下几个问题比较重要:
     l验一、where 条g左边最好不要用函敎ͼ比如 ★★★★?br />            select ...     where     datediff(day,date1,getdate())>;0
           q样即?date1 列上建立了烦引,也可能不会用烦引,而用表扫描?br />             q样的语句要重新规划设计Q保证不使用函数也能够实现。通过修改Q一个系l过E的q行效率提高大约100倍!此外不要使用诸如like '%ab',不能充分利用索引Q而要?前加字符
      l验二、两个比较字D|好用相同数据类型,而不是兼Ҏ据类型。比?int ?numericQ感觉一般不是太明显Q★?br />
      l验三、复合烦引的非前导列做条件时Q基本没有v到烦引的作用。★★★★★
            比如 create index idx_tablename_ab on tablename(a,b)
                update tablename set c = XX where b>;= XXX and ...
                在这个语句中Q基本上索引没有发挥作用?D表扫描引起blocking 甚至q行十几分钟后报告失败?br />                 一定要认真?Ҏ措施Q?在接口中附加条g
                    update tablename set c = XX where a = XXX     and b>;= XXX
                 或者徏立烦引类g
                    create index idx_tablename_ba on tablename(b,a)  
      l验四?多个大表的关联查询,如果性能不好Qƈ且其中一个大表中取的数据比较,可以考虑查询分两步执行。★★★?br />              先将一个大表中的少部分数据 select * into #1 from largetable1 where ...
              然后再用 #1 d兌Q效果可能会好不。(前提Q生?#1表应该用比较好的烦引,速度比较快)

      l验五?tempdb 的用。★★★★★
              最好多?select into     Q这样不记日?Q尤其是有大量数据的报表时。虽然写hȝQ但值得?br />                 create table #tmp1 (......)q样写性能不好。尤其是大量使用ӞҎ发生tempdb 争用?br />       l验六?pȝU别的参数设|?nbsp;    ★★★★
               一定要估计一下,不要使用太多Q占用资?nbsp;    Q太,发生性能问题?br />                  q接敎ͼ索引打开个数、锁个数 {?当然 Q内存配|不要有明显的问题,比如Qprocedure cache
                不够 Q一般缺?0%Q如果觉得太多,可以减少一些)。如果做报表l常使用大数据量读,可以考虑使用
                16Kdata cache

       l验七、烦引的建立。很重要。★★★★★
                  clustered index     /nonclustered index 的差异,自己要搞清楚。各适用场合Q另外如?br />                 clustered index 不允?重复敎ͼ也一定要说明?br />                索引设计是以为数据访问快速ؓ原则的,不能 完全Q!Q) 参照数据逻辑设计的,逻辑设计时的一些东西,
              可能对物理访问不起作?br />
       l验八、统计数据的更新Q大U?0天进?update statistics     ,sp_recompile table_nameQ★★★Q?br />
       l验九、强制烦引?Q★★★★)
             如果怀疑有表访问时不是使用索引Q而且q些条g字段上徏立了合适的索引,可以强制使用
               select * from tableA (index idx_name) where ...
              q个对一些报表程序可能比较有用?br />
       l验十、找一个好的监视工?★★?br />              工欲善其事,比先利其器,一炚w不错呀?br />               我用 DBartisian 5.4 ,监视哪些表被锁定旉长, blocking {?br />                   q有 sp_object_status 20:00:00 Q?sp_sysmon 20:00:00 {?br />        以上是我的一点经验,在不C个月的时间内Q我修改?0个左右的语句和系l过E?nbsp;    Q?br />
         pȝ性能明显改善Qcpu利用 高峰时大U?0% qx 不到30%IO 明显改善。所有月报表能顺利完?5min 以内?/p>

    l验十一Q?l合以上对IN/EXISTS的讨论,我们可以得出一个基本通用的结论:IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情c?br />

         另外Q系l中认不用的中间数据Q可以进行{UR这些要看系l的情况?br />           最后祝你好q气?br />
以上Z人经验,Ƣ迎批评指正Q?nbsp;    

     呵呵 写完后忘C?nbsp;    一定要注意热点?Q这是媄响ƈ发问题的一个潜在因素。!解决ҎQ?行锁模式 如果表的行比较小Q可以故意增加一些不用的字段
     比如     char(200)     让一中存放的行不要太多?/p>



]]>
Sybase数据库的日常l护 http://www.aygfsteel.com/shanben/archive/2008/07/05/212751.html虎啸长沙,龙跃深圳.虎啸长沙,龙跃深圳.Sat, 05 Jul 2008 09:19:00 GMThttp://www.aygfsteel.com/shanben/archive/2008/07/05/212751.htmlhttp://www.aygfsteel.com/shanben/comments/212751.htmlhttp://www.aygfsteel.com/shanben/archive/2008/07/05/212751.html#Feedback0http://www.aygfsteel.com/shanben/comments/commentRss/212751.htmlhttp://www.aygfsteel.com/shanben/services/trackbacks/212751.html

l护目的Q?br />
监测数据库的当前q行状况Q保证数据库E_q行?br />
做好数据库的日常的备份工作,减轻问题发生时的风险和责?br />
数据库的整体运行状况,Ҏ据库的性能q行调整Q保证数据库高效的运行?br />
可以减少紧急故障发生频率,减少对系l的影响?br />
早发现pȝ存在的潜在问题,使可能的故障消除在萌芽状态?/p>

数据库日常维护的主要内容
监测数据库运行情?br />
监控CPU和I/O的用情?br />
监控I间的用情?br />
监控数据库的错误日志errorlog

制定一个合理的备䆾计划

查数据库的一致?br />
数据库的排错

数据库性能调整

数据库日常维护的Ҏ

数据库服务和备䆾服务的启动和关闭Ҏ

数据库和备䆾服务的启?br />
$cd  $SYBASE/ASE-12_*/install

$startserver –f RUN_Servername(ServernameZ的数据库服务?

$startserver –f RUN_Servername_back

数据库和备䆾服务的关?br />
isql –Usa –Pxxx –Sservername

>shutdown SYB_BACKUP (关闭备䆾服务)

>go

>use dbname (用户?

>go

>checkpoint

>go

>shutdown

>go

查看sybase用户的运行环境是否正?br />
$env

查看SYBASE,SYBASE_ASE,SYBASE_OCS{环境是否正?br />
查看数据库服务和备䆾服务q程是否q行正常

$ps –ef | grep  dataserver

$ps –ef | grep  backupserver

查看数据库的版本和补丁信?br />
$dataserver –v

或是

isql –Usa –Pxxx –Sservername

>select  @@version

查数据库的配|是否合?

查数据库内存分配、锁个数、存储过E缓册Ӏ多CPU配置、用戯接配|、网l包寸{重要参数的讄?br />
命oQ?br />
sp_configure ‘allocate max shared memory’

sp_configure ‘max memory‘

sp_configure ‘procedure cache size‘

sp_configure ‘user log cache size’

sp_configure ‘default network packet size’

sp_cacheconfig

sp_configure ‘number of user connections‘

sp_configure ‘number of locks‘

sp_configure ‘number of engines at startup’

sp_configure ‘max online engines’

sp_configure “number of open index”

sp_configure “number of open objects”

sp_configure “number of open partitions”

查看数据库的用户Q数据库的锁状况

sp_who(用户)

sp_lock(?

select spid,blocked from sysprocesses where blocked>0(查阻塞进E?

查看最早进E,发现不完整事?br />
select *  from master..syslogshold

其中对应的spid为最早的q程Q如果最早的q程开始时间距d前时间已l非帔R(???Q则可能该进E有问题Q确认后Q应该将其killQ下面有一个存储过E来不完整的事务,可以该存储q程攑֜操作pȝ的crontab中?/p>

create proc proc_kill
@last_min int=720

AS

/*

** kill the processes that didn’t commit for a impossible time

** the parameter's time unit is minute,default is 12 hours

** the procedure is just for user transactions ,not  for xa transaction

** you can add this procedure to your opration system crontab

*/

declare @spid     int

declare @cspid     char(20)

select spid into #killtab from master..syslogshold where datediff(mi,starttime,getdate()) >@last_min and spid>0

declare t1_cur cursor for select * from #killtab

open t1_cur

fetch t1_cur into @spid

while @@sqlstatus!=2

begin

     select @cspid=convert(char(20),@spid)

     select "kill "+@cspid
exec("kill "+@cspid)
     fetch t1_cur into @spid

end

查看CPU和I/O的?br />
#sar #iostat

#vmstat

查看Sybase的资源?br />
sp_sysmon “00:10:00”

如果CPU或是I/O的用率长期高于80%Q则要看pȝ使用是否正常q是pȝ资源配置不够Q具体细节可参考下面数据库的优化部分?br />
定期查数据库日志使用的情况,定期清除数据库的日志

如果数据库日志满Q则业务无法q行?br />
sp_helpdb dbname(用户库名)

发现数据库的日志I间不Q应立刻清除已经完成的事务,或是Ҏ需要扩大日志空间?br />
定期清除日志Q?br />
dump tran dbname with  truncate_only

可以上q的命o攑֜crontab中?br />
定期查磁盘空间的使用?如果发现操作pȝ有磁盘分Z用达?00%Q应快处理?br />
#df -k

定期查数据库的错误日?errorlog)Q如果错误日志中发现有数据库的严重错误,应立卛_理?br />
有计划的截断数据库的错误日志?br />
数据库运行一定时间后Q可以在数据库没有业务时Q(下班或周末)Q将数据库stop后,错误日志更名,然后重新启动数据库,产生一个新的数据库错误日志?/p>

在错误日志中,以下的错误别ؓ不严重错?通常是用户错?如语?d权限I间不{?br /> 10 Status information

11  Specified database object not found

12 Wrong datatype encountered

13 User transaction syntax error

14 Insufficient permissions to execute commands

15 Syntax error in SQL statement

16 Miscellaneous user error

 Hardware/software errors

17 Insufficient resources

18 Non-fatal internal error

在错误?7?要注意错误号1105,1105表示I间不(数据库数据或是日??br />
在错误?8?最多的?608,1608表示一个客戯接不是正常方式退出的Q?br />
q类错误不用x?/p>

以下错误U别Z重错?通常是系l?数据库、磁盘损坏、操作系l?错误
19 Fatal error in resource

20 Fatal error in current process

21 Fatal error in database process

22 Fatal error: table integrity suspect

23 Fatal error: database integrity suspect

24 Hardware error or system table corruption

在错误日志中Q可以按?Sybase Technical Support"来搜索,

扑ֈ的错误通常是严重错误?/p>

查数据库的一致?br /> 系l数据库、用h据库的数据分配页物理可用性,查数据库pȝ表和用户表的数据完整性,查看是否有表损坏Q可能是逻辑也可能是物理的损坏,如磁盘错误可能导致数据库的表损坏Q?br />
做数据库的一致性通常需要单用户状态,q且都是一些耗时操作Q如果数据库大的话)Q因此,q些查可以考虑在系l检修时q行?br />
dbcc checkalloc(dbname)查数据库的空间分配,必须在单用户下执?br />
checkcatalog(dbname) 查系l表的一致?br />
dbcc checkdb(dbname) 查用h据库的数据库一致?包括pȝ表和用户?

dbcc checktable(tablename) 查一张表的数据一致性?/p>

数据库的备䆾
数据库的备䆾对于日常的维护来说十分重要,pȝ理员一定要注意数据库每天都有成功备份。需要检查备份的介质(盘或是带)是否正常?br />
备䆾命o:

dump database  to ‘/xx/xxx’ Q设备名或是盘上的文g名)

用户可以规划一个备份的计划Q然后将备䆾的命令放在crontab 中,让系l自动定时做数据库的备䆾?/p>

数据库的排错
数据库通常的错误主要是以下几种

数据库服务无法启?br />
解决Q查看数据库的错误日志,Ҏ错误日志扑ֈ无法启动的原因,原因通常是ip地址Q端口不Ҏ是被占用Q内存配|过大,或是数据库设备的属性不对,sybase用户没有讉K权限?br />
数据库不能恢?recovery)

解决Q查看数据库的错误日志,扑ֈ数据库不能恢复的原因Q然后做相应的处理。通常是由于系l突然断甉|是系l非正常x?br />
用户表不能访?br />
解决Q查看数据库的错误日志,扑ֈ不能讉K的原因。通常是由于访问权限或是表损坏Q?

最常见的数据库重大故障分析
Ҏ我们的经验,除去g故障外,造成重大数据库故障都是因为日志满Q重启动时异常删除日志导_

而日志满主要是一下几个原因造成Q?br />
1Q数据库配置不合?br />
主要是内存、锁的配|不合理?br />
2Q存在不完整的事务或是进E?br />
出现q种情况是由于不完整的事务引L。引起不完整的事务主要有两个斚w的原因:W一是网l质量不佻I如果在客L向ASE服务端进行事务时Q如果网l突然中断,会导致事务的不完整。第二是应用E序存在问题Q而在q种情况下,重新启动数据库服务后Q数据库的恢复可能是非常~慢的,主要是看日志的大和事务的类型,Q有时用户ؓ了快速启动,通常会异常清除数据库的日志,有可能会造成数据库表损坏Q所以,在这U情况下千万不要急于重新启动数据库服务?br />
如果存在不完整的事务Q在该事务之后的所有事务都不能被清除,D数据库日志满?br />
不完整的事务可以从master..syslogshold表中发现Q如果其中starttimeQ最早的事务开始时_距离当前旉很长Q比如一天,一月,则该事务应该是一个不完整的事务,可以该事务对应的数据库q程kill?/p>

3Q出现过大的事务
q类问题完全是应用或是h为造成的问题。例如一ơ删除一?000万条记录的表Q导致日志满。这U情况下重启动服务,数据库的恢复也将是十分缓慢的Q防止出现这c问题,是将大事务{换成许多事务来执行。在事务之间来删除数据库的日志。例如手工删除日志或是将数据库设|成自动清日志?/p>

数据库的性能优化
查看数据库的配置Q看能否有不合理的数据库配置?br />
查看Ҏ参考上一节查看数据库的配|?br />
更新数据库的l计信息(锁)

update statistics tablename

对行锁表回收I间(表锁)

reorg rebuild  tablename

做空间回收时需要在pȝl护时做

监测数据库的q行Q查看是否阻塞羃

sp_lock

sp_who

select spid,bloced from master..sysprocesses where blocked>0

Ҏ据库pȝq行q行监测Q发现可能引h能差的因素

在系l运行忙或是性能不佳时运?br />
sp_sysmon “00:10:00”


分析的一些常用工P

在应用开发或是执行之前,对可能引起问题的语句查命令:

set showplan on
set noexec on

q样Q可以看到该语句的执行过E,而该语句q不执行?/p>


set showplan off

set noexec off

off 以上的选项

set statistics io on /off
set statistics time on/off

在语句执行时可以看到I/O的实际情况(包括物理I/O,逻辑I/O)

以上语句Zsession

在运行过E中查找可能有问题的语句的命令:

q行几次 sp_lock
查找其中对表意向?(sh_intent,ex_intent)较长旉的进E,记录下spid

( 比如Qupdate 一?00万条记录中的一条,如果表不使用索引Q最l会有一个Ex_row锁,但在表扫描期_一直会有一?br />
Ex_intent意向锁)

通过spid,可以看到执行命o和执行过E:

dbcc traceon(3604)

go

dbcc sqltext(spid)

go

sp_showplan spid,null,null,null

go

查找dq程Q?br /> select spid,blocked from master..sysprocesses where blocked>0

其中blocked 对应d别h的进行,spid对应被阻塞经常,

查看blocked对应q程执行的命令和执行q程

Ҏ同上

查找最耗资源的q程Q下面有两个存储q程Q可以分析在数据库繁忙时最消耗cpu和i/o资源的数据库q程Qƈ昄该进E所执行的语句以及执行的q程Q根据执行过E来判断问题的原因?/p>

if exists( select name from  sysobjects where  type='P' and name='proc_who_do_io')
 drop proc  proc_who_do_io

go

/* print  top n (of  physical_io usages)  applications 's  execute plan and sql */
/* example useage : proc_who_do_io  */ 

create proc  proc_who_do_io

@inter_time    char(8)='00:00:05',

@topn  int=3

as

declare  @spid  int

select @spid=11

dbcc traceon(3604)

select  spid,cmd,physical_io,hostname,program_name into #t1 from  master..sysprocesses order

by spid

waitfor delay @inter_time

select spid,cmd,physical_io ,hostname,program_name into #t2 from  master..sysprocesses order

by spid

select  #t1.spid,#t1.cmd,#t1.program_name,#t1.physical_io as phy_io,#t1.hostname,#t2.physical_io - #t1.physical_io as
phy_io_add  into #t3 from #t1,#t2

where  #t1.spid=#t2.spid  and abs(#t2.physical_io - #t1.physical_io) >2 order by  #t2.physical_io - #t1.physical_io  desc

select *  from #t3

select  *  into #t4  from #t3 where 1=2

set rowcount 1

while  @topn >0

begin

 insert  #t4 select * from #t3

 delete #t3

 select @spid=spid from  #t4

 select "execute plan :"+  str(@spid)

 exec sp_showplan @spid,null,null,null

 dbcc sqltext(@spid)

 delete #t4

 select @topn = @topn-1

end

set rowcount 0

go

 

if exists( select name from  sysobjects where  type='P' and name='proc_who_use_cpu')
 drop proc  proc_who_use_cpu

go

/* print  top n (of  cpu usages)  applications 's  execute plan and sql */
/* example useage : proc_who_use_cpu  */ 

create proc  proc_who_use_cpu

@inter_time    char(8)='00:00:05',

@topn  int=3

as

declare  @spid  int

select @spid=11

dbcc traceon(3604)

select  spid,cmd,cpu,hostname,program_name into #t1 from  master..sysprocesses order

by spid

waitfor delay @inter_time

select spid,cmd,cpu ,hostname,program_name into #t2 from  master..sysprocesses order

by spid

select  #t1.spid,#t1.cmd,#t1.program_name,#t1.cpu ,#t1.hostname,#t2.cpu - #t1.cpu as
cpu_add  into #t3 from #t1,#t2

where  #t1.spid=#t2.spid  and abs(#t2.cpu - #t1.cpu) >2 order by  #t2.cpu - #t1.cpu  desc

select *  from #t3

select  *  into #t4  from #t3 where 1=2

set rowcount 1

while  @topn >0

begin

 insert  #t4 select * from #t3

 delete #t3

 select @spid=spid from  #t4

 select "execute plan :"+  str(@spid)

 exec sp_showplan @spid,null,null,null

 dbcc sqltext(@spid)

 delete #t4

 select @topn = @topn-1

end

set rowcount 0

go

数据库版本在 ASE12.5.0.3以上Q?L索引使用情况
select s.SPID,s.CpuTime,t.LineNumber,t.SQLText

from monProcessStatement s,monProcessSQLText t

where s.SPID=t.SPID

order by s.CpuTime,s.SPID,t.LineNumber desc



]]>
查看q段旉来对哪些表、烦引的操作比较多的存储q程http://www.aygfsteel.com/shanben/archive/2008/07/05/212747.html虎啸长沙,龙跃深圳.虎啸长沙,龙跃深圳.Sat, 05 Jul 2008 08:29:00 GMThttp://www.aygfsteel.com/shanben/archive/2008/07/05/212747.htmlhttp://www.aygfsteel.com/shanben/comments/212747.htmlhttp://www.aygfsteel.com/shanben/archive/2008/07/05/212747.html#Feedback0http://www.aygfsteel.com/shanben/comments/commentRss/212747.htmlhttp://www.aygfsteel.com/shanben/services/trackbacks/212747.html   SETUSER     'dbo'  
  go  
  use   sybsystemprocs  
  go  
   
  drop   proc   sp_hotobjects  
  go    
   
  create   procedure   sp_hotobjects  
  @interval   char(12)   =   "",             /*   time   interval   string   */  
  @interval_sample   char(12)   =   "00:05:00"               /*   sample   interval   every   5   minutes   by   default   */  
  as  
   
  declare   @TmpTime   datetime       /*   temporary   datetime   variable   */  
  declare   @Seconds   int                 /*   Interval   converted   to   seconds   */  
  declare   @Endtime   datetime  
   
   
  create   table   #hotobjects_totals  
  (dbname   char(30)   not   null,  
  objname   char(30)   not   null,  
  lockcount   int   null,  
  locktable   int   null,      
  lockshared   int   null,  
  lockexclusive   int   null,  
  lockrow   int   null,  
  lockpage   int   null,  
  lockblk   int   null  
  )  
   
  create   table   #hotobjects  
  (dbname   char(30)   not   null,  
  objname   char(30)   not   null,  
  lockcount   int   null,  
  locktype   int   not   null,  
  primary   key(dbname,   objname,   locktype))  
   
   
  /*   loop   for   the   interval   specified   */  
  select   @TmpTime   =   convert(datetime,   @interval)  
  select   @Seconds   =   datepart(hour,@TmpTime)*3600+datepart(minute,@TmpTime)*60+datepart(second,@TmpTime)  
  select   @Endtime   =   dateadd(second,   @Seconds,   getdate())  
   
  /*   create   a   holding   table   */  
  select   dbname,   objname   into   #hotobjects_holding    
  from   #hotobjects   where   1=2  
   
   
   
   
  while   (getdate()   <   @Endtime)  
  begin  
   
  /*   populate   the   initial   records   */  
  delete   from   #hotobjects  
  insert   into   #hotobjects(dbname,   objname,   lockcount,   locktype)  
  select   distinct   db_name(dbid),   object_name(id,dbid),   count(type),   type   from   master..syslocks    
  where   object_name(id,dbid)   not   like   "#%"       --   and   object_name(id,dbid)   not   like   "sys%"    
  and   object_name(id,dbid)   not   like   "hot%"     group   by   type    
   
  waitfor   delay   @interval_sample  
   
  /*   add   a   record   into   #hotobjects_totals   if   it   does   not   exist   */  
  if   not   exists(select   1   from   #hotobjects_totals   TOT,   #hotobjects   HOT  
  where   TOT.dbname   =   HOT.dbname   and   TOT.objname   =   HOT.objname)    
  /*   add   this   new   lock   record   */  
  begin  
   
        /*   populate   a   holding   table   */  
  delete   from   #hotobjects_holding  
  insert   into   #hotobjects_holding  
  select   distinct   dbname,   objname   from   #hotobjects  
   
        /*   now   delete   from   the   holding   table   all   records   we   have   done   before   */  
  delete   from   #hotobjects_holding  
  from   #hotobjects_holding   HOLD,   #hotobjects_totals   TOT  
  where   HOLD.dbname   =   TOT.dbname   and   HOLD.objname   =   TOT.objname  
  /*   what   is   left   is   the   new   records.....add   these   into   the   totals   table   */  
   
  insert   into   #hotobjects_totals(dbname,   objname,     lockcount,   locktable,   lockshared,      
                                                                                                                                                  lockexclusive,   lockrow,   lockpage,   lockblk)  
                          select   distinct   HOLD.dbname,   HOLD.objname,   0,   0,0,0,0,0,0    
  from   #hotobjects_holding   HOLD  
   
  end  
   
   
  /*   from   here   on   we   will   update   this   record     */  
   
  update   #hotobjects_totals  
  set   lockcount   =   TOT.lockcount   +   HOT.lockcount  
  from   #hotobjects_totals   TOT,   #hotobjects   HOT  
  where   TOT.dbname   =   HOT.dbname   and   TOT.objname   =   HOT.objname  
   
  update   #hotobjects_totals  
  set   locktable   =   locktable   +   HOT.lockcount  
  from   #hotobjects_totals   TOT,   #hotobjects   HOT  
  where   TOT.dbname   =   HOT.dbname   and   TOT.objname   =   HOT.objname  
  and   HOT.locktype   in   (1,2)  
   
  update   #hotobjects_totals  
  set   lockshared   =   lockshared   +   HOT.lockcount  
  from   #hotobjects_totals   TOT,   #hotobjects   HOT  
  where   TOT.dbname   =   HOT.dbname   and   TOT.objname   =   HOT.objname  
  and   HOT.locktype   in   (2,6,9)  
   
  update   #hotobjects_totals  
  set   lockexclusive   =   lockexclusive   +   HOT.lockcount  
  from   #hotobjects_totals   TOT,   #hotobjects   HOT  
  where   TOT.dbname   =   HOT.dbname   and   TOT.objname   =   HOT.objname  
  and   HOT.locktype   in   (1,5,8)  
   
  update   #hotobjects_totals  
  set   lockrow   =   lockrow   +   HOT.lockcount  
  from   #hotobjects_totals   TOT,   #hotobjects   HOT  
  where   TOT.dbname   =   HOT.dbname   and   TOT.objname   =   HOT.objname  
  and   HOT.locktype   in   (8,9,10)  
   
  update   #hotobjects_totals  
  set   lockpage   =   lockpage   +   HOT.lockcount  
  from   #hotobjects_totals   TOT,   #hotobjects   HOT  
  where   TOT.dbname   =   HOT.dbname   and   TOT.objname   =   HOT.objname  
  and   HOT.locktype   in   (5,6,7)  
   
  update   #hotobjects_totals  
  set   lockblk   =   lockblk   +   HOT.lockcount  
  from   #hotobjects_totals   TOT,   #hotobjects   HOT  
  where   TOT.dbname   =   HOT.dbname   and   TOT.objname   =   HOT.objname  
  and   HOT.locktype   >   255   and   HOT.locktype   <   269  
   
   
  end  
   
  select   "In   "   +   rtrim(dbname)   +   "the   table   "   +   rtrim(objname)   +   "   had   "   +    
  case    
  when   locktable   >   1   then   "table   level,   "  
  when   lockshared   >   1   then   "shared,   "    
  when   lockexclusive   >   1   then   "exclusive,   "  
  when   lockrow   >   1   then   "row,   "  
  when   lockpage   >   1   then   "page,   "  
  when   lockblk   >   1   then   "blocking   "  
  end  
  +   "   locks"  
    from   #hotobjects_totals    
  return   (0)  
  go  
   
  grant   exec   on   sp_hotobjects   to   public  
  go   
    
   


]]>
Sybase数据库死锁对{?/title><link>http://www.aygfsteel.com/shanben/archive/2008/07/02/212199.html</link><dc:creator>虎啸长沙,龙跃深圳.</dc:creator><author>虎啸长沙,龙跃深圳.</author><pubDate>Wed, 02 Jul 2008 12:58:00 GMT</pubDate><guid>http://www.aygfsteel.com/shanben/archive/2008/07/02/212199.html</guid><wfw:comment>http://www.aygfsteel.com/shanben/comments/212199.html</wfw:comment><comments>http://www.aygfsteel.com/shanben/archive/2008/07/02/212199.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/shanben/comments/commentRss/212199.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/shanben/services/trackbacks/212199.html</trackback:ping><description><![CDATA[<p>死锁的发生对pȝ的性能和吞吐量都有重要影响Q经发玎ͼ理信息pȝ的死锁主要是因ؓ两个或多个线E(dQ抢占同一表数据资源。引起长旉抢占同一资源不是因ؓ我们需要处理的事务太复杂,旉太长Q而往往是因为我们在前端应用E序Ҏ据库作操作时忘了提交。本文介l一U处理解册U死锁的Ҏ? <p><strong>Sybase锁原理</strong></p> <p>数据׃n与数据一致性是一对不可调和的矛盾Qؓ了达到数据共享与数据一_必须q行q发控制。ƈ发控制的d是Z避免׃n冲突而引L数据不一致。Sybase SQL Serverq发控制的方法是加锁机制QLOCKINGQ?</p> <p><strong>锁的cd</strong></p> <table cellspacing="1" cellpadding="5" align="center" bgcolor="#000000" border="1"> <tbody> <tr bgcolor="#cccccc"> <td>可申L?br /> 已有的锁</td> <td>S</td> <td>U</td> <td>X</td> </tr> <tr bgcolor="#cccccc"> <td>S</td> <td>?/td> <td>?/td> <td>×</td> </tr> <tr bgcolor="#cccccc"> <td>U</td> <td>?/td> <td>×</td> <td>×</td> </tr> <tr bgcolor="#cccccc"> <td>X</td> <td>×</td> <td>×</td> <td>×</td> </tr> </tbody> </table> <p>Sybase SQL Server有三U封锁类型:排它锁(exclusive lock,UX锁)Q共享锁Qshare lock,US锁)Q更新锁Qupdate lock,UU锁)。这三种锁的相容矩阵表如下:</p> <p>×:表示不兼宏V∨Q表C兼宏V?/p> <p>Sybase SQL Server是自动决定加锁类型的。一般来_读(SELECTQ操作用S锁,写(UPDATE,INSERT和deleteQ操作用X锁。U锁是建立在页U上的,它在一个更新操作开始时获得Q当要修改这些页ӞU锁会升为X锁?/p> <p><strong>锁的力度</strong></p> <p>SQL Server有两U锁Q页锁和表锁。通常锁比表锁的限制更少Q或更小Q。页锁对本页的所有行q行锁定Q而表锁则锁定整个表。ؓ了减用户间的数据争用和改进q发性,SQL Server试图可能地使用锁?/p> <p>当SQL Server军_一个语句将讉K整个表或表的大多数页Ӟ它用表锁来提供更有效的锁定。锁定策略直接受查询ҎU束Q如果update或delete语句没有可用的烦引,它就执行表扫描或h一个表锁定。如果update或delete语句使用了烦引,它就通过h锁来开始,如果影响到大多数行,它就要请求表锁。一旦一个语句积累的锁过锁提升阈|SQL Serverp法给该对象分配一个表锁。如果成功了Q页锁就不再必要了,因此被释放。表锁也在页层提供避免锁冲突的方法。对于有些命令SQL Server自动使用表锁?/p> <p><strong>锁的状?/strong></p> <p>SQL SERVER加锁有三U状态:</p> <p>1Q意向锁QintendQ—是一U表U锁Q它表示在一个数据页上获得一个S或X锁的意向。意向锁可以防止其他事务在该数据늚表上获得排它锁?/p> <p>2Q阻塞(blocking,记blkQ—它表明目前加锁q程的状态,带有blk后缀的锁说明该进E目前正d另一个需要获得锁的进E,只有q一q程完成Q其他进E才可以q行?/p> <p>3Q需求锁QdemandQ—表C此时该q程企图得到一个排它锁。它可以防止在这一表或上加过多的S锁,她表C某一事务是下一个去锁定该表和该늚事务?/p> <p>需求锁是一个内部过E,因此用sp_lock是无法看见的?/p> <p><strong>死锁DEADLOCK</strong></p> <p>单地_有两个用戯E,每个q程都在一个单独的|表上有一个锁Q而且每个q程都想在对方进E的|表上h不相定w时就会发?#8220;死锁”。在q种情况下,W一个进E在{待另一q程释放锁,但另一q程要等到第一个进E的对象释放时才会释放自q锁?/p> <p>SQL Server查是否死锁,q终止事务中CPU旉U篏最的用户Q即最后进入的用户Q。SQL Server回滚该用L事务Qƈ用消息号1205通知有此死锁行ؓ的应用程序,然后允许其他用户q程l箋q行?/p> <p>在多用户情Ş下,每个用户的应用程序都应检查每个修Ҏ据的事务是否?205h息,以此定是否有可能死锁。消息号1025表示该用L事务因死锁而终止ƈ被回滚。应用程序必重新开始这个事务处理?/p> <p><strong>查找死锁原因</strong></p> <p>既然理信息pȝ长时间死锁的原因是由于我们提交或者是提交不当Q那么我们就可以通过修改E序防止出现死锁。定位死锁出错处主要l过以下三步Q?/p> <p>1Q在死锁出现Ӟ用SP_WHO,SP_LOCK获得q程与锁的活动情c?br /> 2Q结合库表sysobjects和相应的操作员信息表查出被锁的库表与锁住别h的操作员?br /> 3Q根据锁定的库表与操作员的岗位,可以估计出程序大U出错处。询问操作员在死锁时执行的具体操作即可完全定位出错处。最后查扄序ƈ修改之?/p> <p><strong>用sp_who获取关于被阻进E的信息</strong></p> <p>pȝq程sp_whol出pȝq程的报告。如果用L命o正被另一q程保持的锁ȝQ则Q?br /> ◆status列显C?#8220;lock sleep”?br /> ◆blk列显CZ持该锁或q些锁的q程标识Q即被谁锁定了?br /> ◆loginame列显C登录操作员。结合相应的操作员信息表Q便可知道操作员是谁?br /> <em>Fid spid status loginame origname blk dbname cmd <br /> 0 1 lock sleep lm lm 18 QJYD SELECT <br /> 0 2 sleeping NULL NULL 0 master NETWORK HANDLER <br /> 0 3 sleeping NULL NULL 0 master NETWORK HANDLER <br /> ……</em></p> <p><strong>用sp_lock览?/strong><br /> 要得到关于当前SQL Server上保持的锁的报告Q可用系l过Esp_lock [spid1[,spid2]]Qspid1,spid2是表master.dbo.sysprocesses中的sql serverq程idP用sp_who可以得到锁定与被锁定的spidP</p> <p>◆locktype列显C加锁的cd和封锁的_度Q有些锁的后~q带有blk表明锁的状态。前~表明锁的cdQSh—共享锁QEx—排它锁或更新锁Q中间表明锁d表上Q?#8221;table”?#8217;intent’Q还是在上QpageQ? 后缀“blk”表明该进E正在障另一个需要请求锁的进E。一旦正在障的q程一l束Q其他进E就向前Ud?#8220;demand”后缀表明当前׃n锁一释放Q?该进E就甌互斥锁?/p> <p>◆table_id列显C的idPl合sysobjects卛_查出被封锁的表名?/p> <p>执行该进E后屏幕昄</p> <p><em>Fid Spid locktype table_id page row dbname Class context<br /> 0 1 Sh_intent 678293476 0 0 QJYD Non Cursor LockFam dur <br /> 0 1 Sh_page 678293476 31764 0 QJYD Non Cursor Lock <br /> 0 18 Ex_intent 9767092 0 0 QJYD Non Cursor LockFam dur <br /> ……</em></p> <p><strong>定位出错?/strong></p> <p>Ҏsp_who与sp_lock命o的结果,l合sysobjects和相应的操作员信息表。得到操作员及其在死锁时所操作的库表,便大U可以知道应用程序的出错处,再询问操作员在死锁时执行什么操作以q一步认证。最后查扄序ƈ修正之?br /> <br /> <br /> ?<br /> 锁的问题一般来讲是q样?  <br />     <br />   首先判断是否存在锁竞?  <br />     <br />   1、基于系l管理员的经验找出热点表   <br />     <br />   2、通过以下Ҏ判断Q?  <br />     <br />   sp_who   <br />   察看pȝ中是否有status为lock   sleep的用戗如果存在,再运行命?  <br />   sp_lock   <br />   察看pȝ中被锁住的表的table_id   <br />   l箋q行命o   <br />   select   *   from   sysobjects   where   id   =   table_id   <br />   扑ֈ被锁住的表名?  <br />   如果发现sp_who中有多个用户被锁Q那么,可认ؓ是锁造成了数据库pȝ的性能底下?  <br />     <br />   调优Ҏ1Q修改对应表的加锁模式由allpagesU锁Q如Q?  <br />   alter   table   XXXX   lock   datarows   <br />     <br />   调优Ҏ2Q改大环境参数number   of   locksQ如Q?  <br />   sp_configure   “number   of   locks”,   50000   <br />   注意Q在q种情况下需要保持total   memory与number   of   locks的匹配性?  <br />     <br />   调优Ҏ3Q配|锁提升阈|可修改的配置包括两项内容Q?  <br />   Page(HWM)、Row(HWM)Q命令如下:   <br />     <br />   Sp_configure   ‘page   lock   promotion   HWM’,   500   <br />   Sp_configure   ‘row   lock   promotion   HWM’,   500   <br /> </p> <img src ="http://www.aygfsteel.com/shanben/aggbug/212199.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/shanben/" target="_blank">虎啸长沙,龙跃深圳.</a> 2008-07-02 20:58 <a href="http://www.aygfsteel.com/shanben/archive/2008/07/02/212199.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sybase数据库中sp_who报告的状态?/title><link>http://www.aygfsteel.com/shanben/archive/2008/07/02/212091.html</link><dc:creator>虎啸长沙,龙跃深圳.</dc:creator><author>虎啸长沙,龙跃深圳.</author><pubDate>Wed, 02 Jul 2008 03:48:00 GMT</pubDate><guid>http://www.aygfsteel.com/shanben/archive/2008/07/02/212091.html</guid><wfw:comment>http://www.aygfsteel.com/shanben/comments/212091.html</wfw:comment><comments>http://www.aygfsteel.com/shanben/archive/2008/07/02/212091.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/shanben/comments/commentRss/212091.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/shanben/services/trackbacks/212091.html</trackback:ping><description><![CDATA[<p>sp_who报告的状态?/p> <p>状?nbsp;         表示       kill命o的效?/p> <p>recv sleep  {待|络d  立即<br /> send sleep  {待|络发?nbsp; 立即<br /> alarm sleep {待警报      立即<br /> lock sleep  {待获取?nbsp;   立即<br /> sync sleep  {待同系列另一q程的同步消?nbsp;  立即.pd中的其它q程也必d为可注销的状?br /> sleeping    {待盘I/O或某U其它资?或许表示正在q行的进E?但正在执行大量的盘I/O  数休眠q程不能苏醒,因而需要服务器重启以将其清?<br /> runnable    在可q行q程队列?nbsp;      立即<br /> running     z跃地运行在一个服务器引擎?nbsp; 立即<br /> infected    服务器已到严重的错误情?极其见    不要使用kill命o.可能需要重启服务器以清除进E?<br /> background  由Adaptive Server而不是用戯E运行的q程例如阈DE?nbsp;  立即;使用kill时必L其小?在注销背景q程之前,仔细查sysprocesses<br /> log suspend   到达日志的最后机会阈值时挂v的进E?nbsp;  立即</p> <p>参?lt;sybase数据库系l管理指?gt;</p> <p><br />  ---?本文转摘自『onlyhot blog ?blog.onlyhot.cn』http://www.onlyhot.cn/blog/?action=show&id=1178</p> <img src ="http://www.aygfsteel.com/shanben/aggbug/212091.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/shanben/" target="_blank">虎啸长沙,龙跃深圳.</a> 2008-07-02 11:48 <a href="http://www.aygfsteel.com/shanben/archive/2008/07/02/212091.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实例讲解了Sybase数据库性能优化的具体过E?/title><link>http://www.aygfsteel.com/shanben/archive/2008/07/01/211952.html</link><dc:creator>虎啸长沙,龙跃深圳.</dc:creator><author>虎啸长沙,龙跃深圳.</author><pubDate>Tue, 01 Jul 2008 08:48:00 GMT</pubDate><guid>http://www.aygfsteel.com/shanben/archive/2008/07/01/211952.html</guid><wfw:comment>http://www.aygfsteel.com/shanben/comments/211952.html</wfw:comment><comments>http://www.aygfsteel.com/shanben/archive/2008/07/01/211952.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/shanben/comments/commentRss/211952.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/shanben/services/trackbacks/211952.html</trackback:ping><description><![CDATA[用一个实例讲解了Sybase数据库性能优化的具体过E,具体内容请参考下文: <p style="text-indent: 2em">׃n? <p style="text-indent: 2em">sp_getapplock 锁定应用E序资源 <p style="text-indent: 2em"> <p style="text-indent: 2em">sp_releaseapplock 为应用程序资源解? <p style="text-indent: 2em"> <p style="text-indent: 2em">SET LOCK_TIMEOUT 1800 锁超时期限设|? <p style="text-indent: 2em"> <p style="text-indent: 2em">sp_configure 'deadlock checking period',5000 讄锁检周? <p style="text-indent: 2em">sp_configure 'lock wait period',5000 讄锁的{待旉 <p style="text-indent: 2em">sp_setrowlockpromote 讄基本个表的最大行锁升U数(锁数) <p style="text-indent: 2em">sp_setrowlockpromote 'TABLE',TREECODE,500,500,100 <p style="text-indent: 2em">sp_setrowlockpromote 'TABLE',LCD05,500,500,100 <p style="text-indent: 2em"> <p style="text-indent: 2em"> <p style="text-indent: 2em">[Lock Manager] <p style="text-indent: 2em">number of locks = 50000 #锁数 <p style="text-indent: 2em">deadlock checking period = DEFAULT <p style="text-indent: 2em">freelock transfer block size = DEFAULT <p style="text-indent: 2em">max engine freelocks = DEFAULT <p style="text-indent: 2em">lock spinlock ratio = DEFAULT <p style="text-indent: 2em">lock hashtable size = DEFAULT <p style="text-indent: 2em">lock scheme = DEFAULT <p style="text-indent: 2em">lock wait period = DEFAULT <p style="text-indent: 2em">read committed with lock = DEFAULT <p style="text-indent: 2em">当很多事务同时访问同一个数据库Ӟ会加剧锁资源争夺Q严重时事务之间会发生死锁。可用sp_object_stats查明死锁位置。该q程报告资源争夺最Ȁ烈的10张表、一个数据库中资源争夺的表和单个表的争夺情况。语法ؓsp_object_stats interval [, top_n [, dbname [, objname [, rpt_option ]]]]Q查看锁争夺情况只需讄interval?#8220;hh:mm:ss”。如果显C每U锁的争夺程度超q?5%Q应该改变加锁方式,比如表的全页锁改成数据页锁,数据锁Ҏ数据行锁{? <p style="text-indent: 2em"> <p style="text-indent: 2em">Parameter Name Default Memory Used Config Value Run Value <p style="text-indent: 2em">-------------- ------- ----------- ------------ --------- <p style="text-indent: 2em">allow remote access 1 0 1 1 <p style="text-indent: 2em">print recovery information 0 0 0 0 <p style="text-indent: 2em">recovery interval in minutes 5 0 5 5 <p style="text-indent: 2em">tape retention in days 0 0 0 0 <p style="text-indent: 2em"> <p style="text-indent: 2em">Parameter Name Default Memory Used Config Value Run Value <p style="text-indent: 2em">-------------- ------- ----------- ------------ --------- <p style="text-indent: 2em">global async prefetch limit 10 0 10 10 <p style="text-indent: 2em">global cache partition number 1 0 1 1 <p style="text-indent: 2em">memory alignment boundary 2048 0 2048 2048 <p style="text-indent: 2em">number of index trips 0 0 0 0 <p style="text-indent: 2em">number of oam trips 0 0 0 0 <p style="text-indent: 2em">procedure cache percent 20 22426 20 20 <p style="text-indent: 2em">total data cache size 0 89698 0 89698 <p style="text-indent: 2em">total memory 47104 196608 98304 98304 <p style="text-indent: 2em"> <p style="text-indent: 2em">Parameter Name Default Memory Used Config Value Run Value <p style="text-indent: 2em">-------------- ------- ----------- ------------ --------- <p style="text-indent: 2em">cis bulk insert batch size 0 0 0 0 <p style="text-indent: 2em">cis connect timeout 0 0 0 0 <p style="text-indent: 2em">cis cursor rows 50 0 50 50 <p style="text-indent: 2em">cis packet size 512 0 512 512 <p style="text-indent: 2em">cis rpc handling 0 0 0 0 <p style="text-indent: 2em">enable cis 1 0 1 1 <p style="text-indent: 2em">max cis remote connections 0 0 0 0 <p style="text-indent: 2em">max cis remote servers 25 19 25 25 <p style="text-indent: 2em"> <p style="text-indent: 2em">Parameter Name Default Memory Used Config Value Run Value <p style="text-indent: 2em">-------------- ------- ----------- ------------ --------- <p style="text-indent: 2em">dtm detach timeout period 0 0 0 0 <p style="text-indent: 2em">dtm lock timeout period 300 0 300 300 <p style="text-indent: 2em">enable xact coordination 1 0 1 1 <p style="text-indent: 2em">number of dtx participants 500 149 500 500 <p style="text-indent: 2em">strict dtm enforcement 0 0 0 0 <p style="text-indent: 2em">txn to pss ratio 16 3692 16 16 <p style="text-indent: 2em">xact coordination interval 60 0 60 60 <p style="text-indent: 2em"> <p style="text-indent: 2em">Parameter Name Default Memory Used Config Value Run Value <p style="text-indent: 2em">-------------- ------- ----------- ------------ --------- <p style="text-indent: 2em">average cap size 200 0 200 200 <p style="text-indent: 2em">caps per ccb 50 0 50 50 <p style="text-indent: 2em">dump on conditions 0 0 0 0 <p style="text-indent: 2em">maximum dump conditions 10 0 10 10 <p style="text-indent: 2em">number of ccbs 0 0 0 0 <p style="text-indent: 2em"> <p style="text-indent: 2em">Parameter Name Default Memory Used Config Value Run Value <p style="text-indent: 2em">-------------- ------- ----------- ------------ --------- <p style="text-indent: 2em">allow sql server async i/o 1 0 1 1 <p style="text-indent: 2em">disable disk mirroring 0 0 0 0 <p style="text-indent: 2em">disk i/o structures 256 31 256 256 <p style="text-indent: 2em">number of devices 10 #5 10 10 <p style="text-indent: 2em">page utilization percent 95 0 95 95 <p style="text-indent: 2em"> <p style="text-indent: 2em">Parameter Name Default Memory Used Config Value Run Value <p style="text-indent: 2em">-------------- ------- ----------- ------------ --------- <p style="text-indent: 2em">event log computer name LocalSystem 0 LocalSystem LocalSystem <p style="text-indent: 2em">event logging 1 0 1 1 <p style="text-indent: 2em">log audit logon failure 0 0 0 0 <p style="text-indent: 2em">log audit logon success 0 0 0 0 <p style="text-indent: 2em"> <p style="text-indent: 2em">Parameter Name Default Memory Used Config Value Run Value <p style="text-indent: 2em">-------------- ------- ----------- ------------ --------- <p style="text-indent: 2em">esp execution priority 8 0 8 8 <p style="text-indent: 2em">esp execution stacksize 77824 0 77824 77824 <p style="text-indent: 2em">esp unload dll 0 0 0 0 <p style="text-indent: 2em">start mail session 0 0 0 0 <p style="text-indent: 2em">xp_cmdshell context 1 0 1 1 <p style="text-indent: 2em"> <p style="text-indent: 2em">Parameter Name Default Memory Used Config Value Run Value <p style="text-indent: 2em">-------------- ------- ----------- ------------ --------- <p style="text-indent: 2em">configuration file 0 0 0 /sybase/hgd <p style="text-indent: 2em"> <p style="text-indent: 2em">Parameter Name Default Memory Used Config Value Run Value <p style="text-indent: 2em">-------------- ------- ----------- ------------ --------- <p style="text-indent: 2em">enable java 0 0 0 0 <p style="text-indent: 2em">size of global fixed heap 300 0 300 300 <p style="text-indent: 2em">size of process object heap 300 0 300 300 <p style="text-indent: 2em">size of shared class heap 3072 0 3072 3072 <p style="text-indent: 2em"> <p style="text-indent: 2em">Parameter Name Default Memory Used Config Value Run Value <p style="text-indent: 2em">-------------- ------- ----------- ------------ --------- <p style="text-indent: 2em">default character set id 1 0 1 1 <p style="text-indent: 2em">default language id 0 0 0 0 <p style="text-indent: 2em">default sortorder id 50 0 50 50 <p style="text-indent: 2em">disable character set conversi 0 0 0 0 <p style="text-indent: 2em">enable unicode conversions 0 0 1 1 <p style="text-indent: 2em">number of languages in cache 3 4 3 3 <p style="text-indent: 2em">size of unilib cache 0 140 0 0 <p style="text-indent: 2em"> <p style="text-indent: 2em">Parameter Name Default Memory Used Config Value Run Value <p style="text-indent: 2em">-------------- ------- ----------- ------------ --------- <p style="text-indent: 2em">deadlock checking period 500 0 500 500 <p style="text-indent: 2em">freelock transfer block size 30 0 30 30 <p style="text-indent: 2em">lock address spinlock ratio 100 0 100 100 <p style="text-indent: 2em">lock hashtable size 2048 48 2048 2048 <p style="text-indent: 2em">lock scheme allpages 0 allpages allpages <p style="text-indent: 2em">lock spinlock ratio 85 0 85 85 <p style="text-indent: 2em">lock table spinlock ratio 20 0 20 20 <p style="text-indent: 2em">lock wait period 2147483647 0 2147483647 2147483647 <p style="text-indent: 2em">max engine freelocks 10 0 10 10 <p style="text-indent: 2em">number of locks 5000 2344 10000 10000 <p style="text-indent: 2em">print deadlock information 0 0 1 1 <p style="text-indent: 2em">read committed with lock 0 0 0 0 <p style="text-indent: 2em"> <p style="text-indent: 2em">Parameter Name Default Memory Used Config Value Run Value <p style="text-indent: 2em">-------------- ------- ----------- ------------ --------- <p style="text-indent: 2em">additional network memory 0 0 0 0 <p style="text-indent: 2em">allow resource limits 0 0 0 0 <p style="text-indent: 2em">audit queue size 100 42 100 100 <p style="text-indent: 2em">average cap size 200 0 200 200 <p style="text-indent: 2em">caps per ccb 50 0 50 50 <p style="text-indent: 2em">deadlock pipe max messages 0 0 0 0 <p style="text-indent: 2em">default network packet size 512 #505 512 512 <p style="text-indent: 2em">disk i/o structures 256 31 256 256 <p style="text-indent: 2em">enable rep agent threads 0 0 0 0 <p style="text-indent: 2em">errorlog pipe max messages 0 0 0 0 <p style="text-indent: 2em">event buffers per engine 100 #11 100 100 <p style="text-indent: 2em">executable codesize + overhead 0 20261 0 20261 <p style="text-indent: 2em">lock hashtable size 2048 48 2048 2048 <p style="text-indent: 2em">lock spinlock ratio 85 0 85 85 <p style="text-indent: 2em">max cis remote servers 25 19 25 25 <p style="text-indent: 2em">max number network listeners 5 868 5 5 <p style="text-indent: 2em">max online engines 1 216 1 1 <p style="text-indent: 2em">max roles enabled per user 20 #22 20 20 <p style="text-indent: 2em">memory per worker process 1024 0 1024 1024 <p style="text-indent: 2em">number of alarms 40 3 40 40 <p style="text-indent: 2em">number of aux scan descriptors 200 #258 200 200 <p style="text-indent: 2em">number of ccbs 0 0 0 0 <p style="text-indent: 2em">number of devices 10 #5 10 10 <p style="text-indent: 2em">number of languages in cache 3 4 3 3 <p style="text-indent: 2em">number of large i/o buffers 6 97 6 6 <p style="text-indent: 2em">number of locks 5000 2344 10000 10000 <p style="text-indent: 2em">number of mailboxes 30 1 30 30 <p style="text-indent: 2em">number of messages 64 3 64 64 <p style="text-indent: 2em">number of open databases 12 1239 12 12 <p style="text-indent: 2em">number of open indexes 500 512 500 500 <p style="text-indent: 2em">number of open objects 500 561 500 500 <p style="text-indent: 2em">number of remote connections 20 86 50 50 <p style="text-indent: 2em">number of remote logins 20 23 20 20 <p style="text-indent: 2em">number of remote sites 10 1729 10 10 <p style="text-indent: 2em">number of user connections 25 43141 250 250 <p style="text-indent: 2em">number of worker processes 0 0 0 0 <p style="text-indent: 2em">partition groups 1024 904 1024 1024 <p style="text-indent: 2em">permission cache entries 15 #227 15 15 <p style="text-indent: 2em">plan text pipe max messages 0 0 0 0 <p style="text-indent: 2em">procedure cache percent 20 22426 20 20 <p style="text-indent: 2em">process wait events 0 0 0 0 <p style="text-indent: 2em">remote server pre-read packets 3 #83 3 3 <p style="text-indent: 2em">size of global fixed heap 300 0 300 300 <p style="text-indent: 2em">size of process object heap 300 0 300 300 <p style="text-indent: 2em">size of shared class heap 3072 0 3072 3072 <p style="text-indent: 2em">size of unilib cache 0 140 0 0 <p style="text-indent: 2em">sql text pipe max messages 0 0 0 0 <p style="text-indent: 2em">stack guard size 4096 #1108 4096 4096 <p style="text-indent: 2em">stack size 86016 #23269 86016 86016 <p style="text-indent: 2em">statement pipe max messages 0 0 0 0 <p style="text-indent: 2em">total data cache size 0 89698 0 89698 <p style="text-indent: 2em">total memory 47104 196608 98304 98304 <p style="text-indent: 2em">txn to pss ratio 16 3692 16 16 <p style="text-indent: 2em">wait event timing 0 0 0 0 <p style="text-indent: 2em"> <p style="text-indent: 2em">Parameter Name Default Memory Used Config Value Run Value <p style="text-indent: 2em">-------------- ------- ----------- ------------ --------- <p style="text-indent: 2em">number of open databases 12 1239 12 12 <p style="text-indent: 2em">number of open indexes 500 512 500 500 <p style="text-indent: 2em">number of open objects 500 561 500 500 <p style="text-indent: 2em">open index hash spinlock ratio 100 0 100 100 <p style="text-indent: 2em">open index spinlock ratio 100 0 100 100 <p style="text-indent: 2em">open object spinlock ratio 100 0 100 100 <p style="text-indent: 2em"> <p style="text-indent: 2em">Parameter Name Default Memory Used Config Value Run Value <p style="text-indent: 2em">-------------- ------- ----------- ------------ --------- <p style="text-indent: 2em">Q diagnostics active 0 0 0 0 <p style="text-indent: 2em">SQL batch capture 0 0 0 0 <p style="text-indent: 2em">deadlock pipe active 0 0 0 0 <p style="text-indent: 2em">deadlock pipe max messages 0 0 0 0 <p style="text-indent: 2em">errorlog pipe active 0 0 0 0 <p style="text-indent: 2em">errorlog pipe max messages 0 0 0 0 <p style="text-indent: 2em">object lockwait timing 0 0 0 0 <p style="text-indent: 2em">per object statistics active 0 0 0 0 <p style="text-indent: 2em">plan text pipe active 0 0 0 0 <p style="text-indent: 2em">plan text pipe max messages 0 0 0 0 <p style="text-indent: 2em">process wait events 0 0 0 0 <p style="text-indent: 2em">sql text pipe active 0 0 0 0 <p style="text-indent: 2em">sql text pipe max messages 0 0 0 0 <p style="text-indent: 2em">statement pipe active 0 0 0 0 <p style="text-indent: 2em">statement pipe max messages 0 0 0 0 <p style="text-indent: 2em">statement statistics active 0 0 0 0 <p style="text-indent: 2em">wait event timing 0 0 0 0 <p style="text-indent: 2em"> <p style="text-indent: 2em">Parameter Name Default Memory Used Config Value Run Value <p style="text-indent: 2em">-------------- ------- ----------- ------------ --------- <p style="text-indent: 2em">additional network memory 0 0 0 0 <p style="text-indent: 2em">allow remote access 1 0 1 1 <p style="text-indent: 2em">allow sendmsg 0 0 0 0 <p style="text-indent: 2em">default network packet size 512 #505 512 512 <p style="text-indent: 2em">max network packet size 512 0 512 512 <p style="text-indent: 2em">max number network listeners 5 868 5 5 <p style="text-indent: 2em">number of remote connections 20 86 50 50 <p style="text-indent: 2em">number of remote logins 20 23 20 20 <p style="text-indent: 2em">number of remote sites 10 1729 10 10 <p style="text-indent: 2em">remote server pre-read packets 3 #83 3 3 <p style="text-indent: 2em">syb_sendmsg port number 0 0 0 0 <p style="text-indent: 2em">tcp no delay 0 0 0 0 <p style="text-indent: 2em"> <p style="text-indent: 2em">Parameter Name Default Memory Used Config Value Run Value <p style="text-indent: 2em">-------------- ------- ----------- ------------ --------- <p style="text-indent: 2em">max async i/os per engine 2147483647 0 2147483647 2147483647 <p style="text-indent: 2em">max async i/os per server 2147483647 0 2147483647 2147483647 <p style="text-indent: 2em">o/s file descriptors 0 0 0 1024 <p style="text-indent: 2em">tcp no delay 0 0 0 0 <p style="text-indent: 2em"> <p style="text-indent: 2em">Parameter Name Default Memory Used Config Value Run Value <p style="text-indent: 2em">-------------- ------- ----------- ------------ --------- <p style="text-indent: 2em">max parallel degree 1 0 1 1 <p style="text-indent: 2em">max scan parallel degree 1 0 1 1 <p style="text-indent: 2em">memory per worker process 1024 0 1024 1024 <p style="text-indent: 2em">number of worker processes 0 0 0 0 <p style="text-indent: 2em"> <p style="text-indent: 2em">Parameter Name Default Memory Used Config Value Run Value <p style="text-indent: 2em">-------------- ------- ----------- ------------ --------- <p style="text-indent: 2em">additional network memory 0 0 0 0 <p style="text-indent: 2em">lock shared memory 0 0 0 0 <p style="text-indent: 2em">max SQL text monitored 0 7 0 0 <p style="text-indent: 2em">shared memory starting address 0 0 0 0 <p style="text-indent: 2em">total memory 47104 196608 98304 98304 <p style="text-indent: 2em"> <p style="text-indent: 2em">Parameter Name Default Memory Used Config Value Run Value <p style="text-indent: 2em">-------------- ------- ----------- ------------ --------- <p style="text-indent: 2em">max online engines 1 216 1 1 <p style="text-indent: 2em">min online engines 1 0 1 1 <p style="text-indent: 2em"> <p style="text-indent: 2em">Parameter Name Default Memory Used Config Value Run Value <p style="text-indent: 2em">-------------- ------- ----------- ------------ --------- <p style="text-indent: 2em">enable rep agent threads 0 0 0 0 <p style="text-indent: 2em"> <p style="text-indent: 2em">Parameter Name Default Memory Used Config Value Run Value <p style="text-indent: 2em">-------------- ------- ----------- ------------ --------- <p style="text-indent: 2em">SQL Perfmon Integration 1 0 1 1 <p style="text-indent: 2em">abstract plan cache 0 0 0 0 <p style="text-indent: 2em">abstract plan dump 0 0 0 0 <p style="text-indent: 2em">abstract plan load 0 0 0 0 <p style="text-indent: 2em">abstract plan replace 0 0 0 0 <p style="text-indent: 2em">allow backward scans 1 0 1 1 <p style="text-indent: 2em">allow nested triggers 1 0 1 1 <p style="text-indent: 2em">allow resource limits 0 0 0 0 <p style="text-indent: 2em">allow updates to system tables 0 0 1 1 <p style="text-indent: 2em">audit queue size 100 42 100 100 <p style="text-indent: 2em">cpu accounting flush interval 200 0 200 200 <p style="text-indent: 2em">cpu grace time 500 0 500 500 <p style="text-indent: 2em">deadlock retries 5 0 5 5 <p style="text-indent: 2em">default database size 2 0 2 2 <p style="text-indent: 2em">default exp_row_size percent 5 0 5 5 <p style="text-indent: 2em">default fill factor percent 0 0 0 0 <p style="text-indent: 2em">enable DTM 0 0 0 0 <p style="text-indent: 2em">enable HA 0 0 0 0 <p style="text-indent: 2em">enable housekeeper GC 1 0 1 1 <p style="text-indent: 2em">enable sort-merge join and JTC 0 0 0 0 <p style="text-indent: 2em">event buffers per engine 100 #11 100 100 <p style="text-indent: 2em">housekeeper free write percent 1 0 1 1 <p style="text-indent: 2em">i/o accounting flush interval 1000 0 1000 1000 <p style="text-indent: 2em">i/o polling process count 10 0 10 10 <p style="text-indent: 2em">identity burning set factor 5000 0 5000 5000 <p style="text-indent: 2em">identity grab size 1 0 1 1 <p style="text-indent: 2em">license information 25 0 25 25 <p style="text-indent: 2em">number of alarms 40 3 40 40 <p style="text-indent: 2em">number of aux scan descriptors 200 #258 200 200 <p style="text-indent: 2em">number of large i/o buffers 6 97 6 6 <p style="text-indent: 2em">number of mailboxes 30 1 30 30 <p style="text-indent: 2em">number of messages 64 3 64 64 <p style="text-indent: 2em">number of open databases 12 1239 12 12 <p style="text-indent: 2em">number of open indexes 500 512 500 500 <p style="text-indent: 2em">number of open objects 500 561 500 500 <p style="text-indent: 2em">number of pre-allocated extent 2 0 2 2 <p style="text-indent: 2em">number of sort buffers 500 0 500 500 <p style="text-indent: 2em">page lock promotion HWM 200 0 200 200 <p style="text-indent: 2em">page lock promotion LWM 200 0 200 200 <p style="text-indent: 2em">page lock promotion PCT 100 0 100 100 <p style="text-indent: 2em">partition groups 1024 904 1024 1024 <p style="text-indent: 2em">partition spinlock ratio 10 0 10 10 <p style="text-indent: 2em">print deadlock information 0 0 1 1 <p style="text-indent: 2em">row lock promotion HWM 200 0 200 200 <p style="text-indent: 2em">row lock promotion LWM 200 0 200 200 <p style="text-indent: 2em">row lock promotion PCT 100 0 100 100 <p style="text-indent: 2em">runnable process search count 2000 0 2000 2000 <p style="text-indent: 2em">size of auto identity column 10 0 10 10 <p style="text-indent: 2em">sql server clock tick length 100000 0 100000 100000 <p style="text-indent: 2em">text prefetch size 16 0 16 16 <p style="text-indent: 2em">time slice 100 0 100 100 <p style="text-indent: 2em">upgrade version 1100 0 12000 12000 <p style="text-indent: 2em"> <p style="text-indent: 2em">Parameter Name Default Memory Used Config Value Run Value <p style="text-indent: 2em">-------------- ------- ----------- ------------ --------- <p style="text-indent: 2em">allow procedure grouping 1 0 1 1 <p style="text-indent: 2em">auditing 0 0 0 0 <p style="text-indent: 2em">check password for digit 0 0 0 0 <p style="text-indent: 2em">curread change w/ open cursors 1 0 1 1 <p style="text-indent: 2em">current audit table 1 0 1 1 <p style="text-indent: 2em">max roles enabled per user 20 #22 20 20 <p style="text-indent: 2em">maximum failed logins 0 0 0 0 <p style="text-indent: 2em">minimum password length 6 0 6 6 <p style="text-indent: 2em">msg confidentiality reqd 0 0 0 0 <p style="text-indent: 2em">msg integrity reqd 0 0 0 0 <p style="text-indent: 2em">secure default login guest 0 guest guest <p style="text-indent: 2em">select on syscomments.text 1 0 1 1 <p style="text-indent: 2em">suspend audit when device full 1 0 1 1 <p style="text-indent: 2em">unified login required 0 0 0 0 <p style="text-indent: 2em">use security services 0 0 0 0 <p style="text-indent: 2em"> <p style="text-indent: 2em">Parameter Name Default Memory Used Config Value Run Value <p style="text-indent: 2em">-------------- ------- ----------- ------------ --------- <p style="text-indent: 2em">default network packet size 512 #505 512 512 <p style="text-indent: 2em">number of pre-allocated extent 2 0 2 2 <p style="text-indent: 2em">number of user connections 25 43141 250 250 <p style="text-indent: 2em">permission cache entries 15 #227 15 15 <p style="text-indent: 2em">stack guard size 4096 #1108 4096 4096 <p style="text-indent: 2em">stack size 86016 #23269 86016 86016 <p style="text-indent: 2em">systemwide password expiration 0 0 0 0 <p style="text-indent: 2em">user log cache size 2048 0 2048 2048 <p style="text-indent: 2em">user log cache spinlock ratio 20 0 20 20 </p> <img src ="http://www.aygfsteel.com/shanben/aggbug/211952.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/shanben/" target="_blank">虎啸长沙,龙跃深圳.</a> 2008-07-01 16:48 <a href="http://www.aygfsteel.com/shanben/archive/2008/07/01/211952.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">¬</a>| <a href="http://" target="_blank">䰲</a>| <a href="http://" target="_blank">ɶ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ͳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Զ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ػʵ</a>| <a href="http://" target="_blank">¬</a>| <a href="http://" target="_blank">ͨ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˺</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank">Ҿ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ŷ</a>| <a href="http://" target="_blank">ͩ</a>| <a href="http://" target="_blank">ƴ</a>| <a href="http://" target="_blank">׶</a>| <a href="http://" target="_blank">崨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ž</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">ʡ</a>| <a href="http://" target="_blank">ֿ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>