??xml version="1.0" encoding="utf-8" standalone="yes"?>麻豆9191精品国产,国产精品一区免费在线,国产精品亚洲一区二区三区在线观看 http://www.aygfsteel.com/allrounder/zh-cn Wed, 18 Jun 2025 13:52:12 GMT Wed, 18 Jun 2025 13:52:12 GMT 60 SQL Server数据库完优化详解( 转蝲Q?/title> http://www.aygfsteel.com/allrounder/articles/356456.html[ 王志?] [ 王志?] Sat, 13 Aug 2011 04:41:00 GMT http://www.aygfsteel.com/allrounder/articles/356456.html http://www.aygfsteel.com/allrounder/comments/356456.html http://www.aygfsteel.com/allrounder/articles/356456.html#Feedback 0 http://www.aygfsteel.com/allrounder/comments/commentRss/356456.html http://www.aygfsteel.com/allrounder/services/trackbacks/356456.html 1、把数据、日志、烦引放C同的I/O讑֤上,增加d速度Q以前可以将Tempdb应放在RAID0上,SQL2000不在支持。数据量(寸)大Q提高I/O重? 2、纵向、横向分割表Q减表的尺?sp_spaceuse) 3、升U硬?br /> 4、根据查询条?建立索引,优化索引、优化访问方式,限制l果集的数据量。注意填充因子要适当(最好是使用默认?)。烦引应该尽量小Q用字节数的列徏索引?参照索引的创?,不要Ҏ限的几个值的字段建单一索引如性别字段 5、提高网? 6、扩大服务器的内?Windows 2000和SQL server 2000能支?-8G的内存。配|虚拟内存:虚拟内存大小应基于计机上ƈ发运行的服务q行配置。运?nbsp;Microsoft SQL Server? 2000 Ӟ可考虑虚拟内存大设|ؓ计算Z安装的物理内存的 1.5 倍。如果另外安装了全文索功能,q打运?nbsp;Microsoft 搜烦服务以便执行全文索引和查询,可考虑Q将虚拟内存大小配置是计算Z安装的物理内存的 3 倍。将 SQL Server max server memory 服务器配|选项配置为物理内存的 1.5 ?虚拟内存大小讄的一??br /> 7、增加服务器 CPU个数;但是必须明白q行处理串行处理更需要资源例如内存。用ƈ行还是串行程是MsSQL自动评估选择的。单个Q务分解成多个dQ就可以在处理器上运行。例如耽搁查询的排序、连接、扫描和GROUP BY字句同时执行QSQL SERVERҎpȝ的负载情况决定最优的q行{Q复杂的需要消耗大量的CPU的查询最适合q行处理。但是更新操作Update,InsertQ?nbsp;Deleteq不能ƈ行处理?br /> 8、如果是使用likeq行查询的话Q简单的使用index是不行的Q但是全文烦引,耗空间?nbsp;like 'a%' 使用索引 like '%a' 不用烦引用 like '%a%' 查询Ӟ查询耗时和字D值总长度成正比,所以不能用CHARcdQ而是VARCHAR。对于字D늚值很长的建全文烦引?br /> 9、DB Server 和APPLication Server 分离;OLTP和OLAP分离 10、分布式分区视图可用于实现数据库服务器联合体。联合体是一l分开理的服务器Q但它们怺协作分担pȝ的处理负荗这U通过分区数据形成数据库服务器联合体的机制能够扩大一l服务器Q以支持大型的多?nbsp;Web 站点的处理需要。有x多信息,参见设计联合数据库服务器?参照SQL帮助文g'分区视图') a、在实现分区视图之前Q必d水^分区?br /> b、在创徏成员表后Q在每个成员服务器上定义一个分布式分区视图Qƈ且每个视囑օ有相同的名称。这P引用分布式分囑的查询可以在M一个成员服务器上运行。系l操作如同每个成员服务器上都有一个原始表的复本一P但其实每个服务器上只有一个成员表和一个分布式分区视图。数据的位置对应用程序是透明的?br /> 11、重建烦?nbsp;DBCC REINDEX ,DBCC INDEXDEFRAG,收羃数据和日?nbsp;DBCC SHRINKDB,DBCC SHRINKFILE. 讄自动收羃日志.对于大的数据库不要设|数据库自动增长Q它会降低服务器的性能。在T-sql的写法上有很大的讲究Q下面列出常见的要点Q首先,DBMS处理查询计划的过E是q样的: 1?nbsp;查询语句的词法、语法检?br /> 2?nbsp;语句提交给DBMS的查询优化器 3?nbsp;优化器做代数优化和存取\径的优化 4?nbsp;由预~译模块生成查询规划 5?nbsp;然后在合适的旉提交l系l处理执?br /> 6?nbsp;最后将执行l果q回l用户其ơ,看一下SQL SERVER的数据存攄l构Q一个页面的大小?K(8060)字节Q?个页面ؓ一个盘区,按照B树存放?br /> 12.commit和rollback的区?nbsp;Rollback:回滚所有的事物?nbsp;Commit:提交当前的事? 没有必要在动态SQL里写事物Q如果要写请写在外面如: begin tran exec(@s) commit trans 或者将动态SQL 写成函数或者存储过E?br /> 13、在查询Select语句中用Where字句限制q回的行?避免表扫?如果q回不必要的数据Q浪费了服务器的I/O资源Q加重了|络的负担降低性能。如果表很大Q在表扫描的期间表锁住Q禁止其他的联接讉K?后果严重?br /> 14、SQL的注释申明对执行没有M影响 15、尽可能不用光标,它占用大量的资源。如果需要row-by-row地执行,量采用非光标技?如:在客L循环Q用临时表,Table变量Q用子查询,用Case语句{等。游标可以按照它所支持的提取选项q行分类Q?nbsp;只进 必须按照从第一行到最后一行的序提取行?
FETCH NEXT 是唯一允许的提取操?也是默认方式。可滚动性可以在游标中Q何地斚w机提取Q意行。游标的技术在SQL2000下变得功能很强大Q他的目的是支持循环。有四个q发选项 READ_ONLYQ不允许通过游标定位更新(Update)Q且在组成结果集的行中没有锁?nbsp;OPTIMISTIC WITH valueS:乐观q发控制是事务控制理论的一个标准部分。乐观ƈ发控制用于这L情ŞQ即在打开游标及更新行的间隔中Q只有很的Z让第二个用户更新某一行。当某个游标以此选项打开Ӟ没有锁控制其中的行,q将有助于最大化其处理能力。如果用戯图修Ҏ一行,则此行的当前g与最后一ơ提取此行时获取的D行比较。如果Q何值发生改变,则服务器׃知道其他人已更新了此行,q会q回一个错误。如果值是一LQ服务器执行修攏V选择q个q发选项OPTIMISTIC WITH ROW VERSIONING:此乐观ƈ发控刉项Z行版本控制。用行版本控制Q其中的表必d有某U版本标识符Q服务器可用它来定该行在读入游标后是否有所更改。在 SQL Server 中,q个性能?nbsp;timestamp 数据cd提供Q它是一个二q制数字Q表C数据库中更改的相对序。每个数据库都有一个全局当前旉戛_|@@DBTS。每ơ以M方式更改带有 timestamp 列的行时QSQL Server 先在旉戛_中存储当前的 @@DBTS |然后增加 @@DBTS 的倹{如果某 个表h timestamp 列,则时间戳会被记到行。服务器可以比较某行的当前旉戛_和上次提取时所存储的时间戳|从而确定该行是否已更新。服务器不必比较所有列的|只需比较 timestamp 列即可。如果应用程序对没有 timestamp 列的表要求基于行版本控制的乐观ƈ发,则游标默认ؓZ数值的乐观q发控制?nbsp;SCROLL LOCKS q个选项实现悲观q发控制。在悲观q发控制中,在把数据库的行读入游标结果集Ӟ应用E序试N定数据库行。在使用服务器游标时Q将行读入游标时会在其上攄一个更新锁。如果在事务内打开游标Q则该事务更新锁一直保持到事务被提交或回滚;当提取下一行时Q将除去游标锁。如果在事务外打开游标Q则提取下一行时Q锁p丢弃。因此,每当用户需要完全的悲观q发控制Ӟ游标都应在事务内打开。更新锁阻止Q何其它Q务获取更新锁或排它锁Q从而阻止其它Q务更新该行。然而,更新锁ƈ不阻止共享锁Q所以它不会L其它dd行,除非W二个Q务也在要求带更新锁的d。滚动锁Ҏ在游标定义的 Select 语句中指定的锁提C,q些游标q发选项可以生成滚动锁。滚动锁在提取时在每行上获取Qƈ保持Cơ提取或者游标关闭,以先发生者ؓ准。下ơ提取时Q服务器为新提取中的行获取滚动锁Qƈ释放上次提取中行的滚动锁。滚动锁独立于事务锁Qƈ可以保持C个提交或回滚操作之后。如果提交时关闭游标的选项为关Q则 COMMIT 语句q不关闭M打开的游标,而且滚动锁被保留到提交之后,以维护对所提取数据的隔R所获取滚动锁的cd取决于游标ƈ发选项和游?nbsp;Select 语句中的锁提C。锁提示 只读 乐观数?nbsp;乐观行版本控?nbsp;锁定无提C?nbsp;未锁?nbsp;未锁?nbsp;未锁?nbsp;更新 NOLOCK 未锁?nbsp;未锁定未锁定 未锁?nbsp;HOLDLOCK ׃n ׃n ׃n 更新 UPDLOCK 错误 更新 更新 更新 TABLOCKX 错误 未锁?nbsp;未锁定更新其?nbsp;未锁?nbsp;未锁?nbsp;未锁?nbsp;更新 *指定 NOLOCK 提示指定了该提示的表在游标内是只ȝ?br /> 16、用Profiler来跟t查询,得到查询所需的时_扑ևSQL的问题所?用烦引优化器优化索引 17、注意UNion和UNion all 的区别。UNION all?br /> 18、注意用DISTINCTQ在没有必要时不要用Q它同UNION一样会使查询变慢。重复的记录在查询里是没有问题的 19、查询时不要q回不需要的行、列 20、用sp_configure 'query governor cost limit'或者SET QUERY_GOVERNOR_COST_LIMIT来限制查询消耗的资源。当评估查询消耗的资源出限制Ӟ服务器自动取消查?在查询之前就扼杀掉?nbsp;SET LOCKTIME讄锁的旉 21、用select top 100 / 10 Percent 来限制用戯回的行数或者SET ROWCOUNT来限制操作的?br /> 22、在SQL2000以前Q一般不要用如下的字? "IS NULL", "<>", "!=", "!>", "!<", "NOT", "NOT EXISTS", "NOT IN", "NOT LIKE", and "LIKE '%500'"Q因Z们不走烦引全是表扫描。也不要在Where字句中的列名加函敎ͼ如ConvertQsubstring{?如果必须用函数的时候,创徏计算列再创徏索引来替?q可以变通写法:Where SUBSTRING(firstname,1,1) = 'm'改ؓWhere firstname like 'm%'(索引扫描)Q一定要函数和列名分开。ƈ且烦引不能徏得太多和太大。NOT IN会多ơ扫描表Q用EXISTS、NOT EXISTS QIN , LEFT OUTER JOIN 来替代,特别是左q接,而Exists比IN更快Q最慢的是NOT操作.如果列的值含有空Q以前它的烦引不起作用,现在2000的优化器能够处理了。相同的是IS NULLQ?NOT", "NOT EXISTS", "NOT IN"能优化她Q?<>"{还是不能优化,用不到烦引?br /> 23、用Query AnalyzerQ查看SQL语句的查询计划和评估分析是否是优化的SQL。一般的20%的代码占据了80%的资源,严重优化的重Ҏq些慢的地方?br /> 24、如果用了IN或者OR{时发现查询没有走烦引,使用昄x指定索引Q?nbsp;Select * FROM PersonMember (INDEX = IX_Title) Where processid IN ('?Q??) 25、将需要查询的l果预先计算好放在表中,查询的时候再Select。这在SQL7.0以前是最重要的手Dc例如医院的住院费计?br /> 26、MIN() ?nbsp;MAX()能用到合适的索引?br /> 27、数据库有一个原则是代码L据越q越好,所以优先选择Default,依次为Rules,Triggers, Constraint(U束如外健主健CheckUNIQUE……,数据cd的最大长度等{都是约?,Procedure.q样不仅l护工作,~写E序质量高,q且执行的速度快?br /> 28、如果要插入大的二进制值到Image列,使用存储q程Q千万不要用内嵌Insert来插?不知JAVA是否)。因样应用程序首先将二进制D{换成字符?寸是它的两?Q服务器受到字符后又他转换成二q制?存储q程没有这些动? ҎQCreate procedure p_insert as insert into table(Fimage) values (@image), 在前台调用这个存储过E传入二q制参数Q这样处理速度明显改善?br /> 29、Between在某些时候比IN 速度更快,Between能够更快地根据烦引找到范围。用查询优化器可见到差别?nbsp;select * from chineseresume where title in ('?,'?) Select * from chineseresume where between '? and '? 是一L。由于in会在比较多次Q所以有时会慢些?
30、在必要是对全局或者局部时表创徏索引Q有时能够提高速度Q但不是一定会q样Q因为烦引也耗费大量的资源。他的创建同是实际表一栗?br /> 31、不要徏没有作用的事物例如生报表时Q浪费资源。只有在必要使用事物时用它?br /> 32、用OR的字句可以分解成多个查询Qƈ且通过UNION q接多个查询。他们的速度只同是否使用索引有关,如果查询需要用到联合烦引,用UNION all执行的效率更?多个OR的字句没有用到烦引,改写成UNION的Ş式再试图与烦引匹配。一个关键的问题是否用到索引?br /> 33、尽量少用视图,它的效率低。对视图操作比直接对表操作慢,可以用stored procedure来代替她。特别的是不要用视图嵌套,嵌套视图增加了寻扑֎始资料的隑ֺ。我们看视图的本质:它是存放在服务器上的被优化好了的已经产生了查询规划的SQL。对单个表检索数据时Q不要用指向多个表的视图,直接从表索或者仅仅包含这个表的视图上读,否则增加了不必要的开销,查询受到q扰.Z加快视图的查询,MsSQL增加了视囄引的功能?br /> 34、没有必要时不要用DISTINCT和ORDER BYQ这些动作可以改在客L执行。它们增加了额外的开销。这同UNION 和UNION ALL一L道理?br /> select top 20 ad.companyname,comid,position,ad.referenceid,worklocation, convert(varchar(10),ad.postDate,120) as postDate1,workyear,degreedescription FROM jobcn_query.dbo.COMPANYAD_query ad where referenceID in('JCNAD00329667','JCNAD132168','JCNAD00337748','JCNAD00338345', 83 <!---->
'JCNAD00333138','JCNAD00303570','JCNAD00303569',
'JCNAD00303568','JCNAD00306698','JCNAD00231935','JCNAD00231933',
'JCNAD00254567','JCNAD00254585','JCNAD00254608',
'JCNAD00254607','JCNAD00258524','JCNAD00332133','JCNAD00268618',
'JCNAD00279196','JCNAD00268613') order by postdate desc
35、在IN后面值的列表中,出现最频繁的值放在最前面Q出现得最的攑֜最后面Q减判断的ơ数?br />
36、当用Select INTOӞ它会锁住pȝ?sysobjectsQsysindexes{等)Q阻塞其他的q接的存取。创Z时表时用昄x语句Q而不?nbsp;select INTO. drop table t_lxh begin tran select * into t_lxh from chineseresume where name = 'XYZ' --commit 在另一个连接中Select * from sysobjects可以看到 Select INTO 会锁住系l表QCreate table 也会锁系l表(不管是时表q是pȝ?。所以千万不要在事物内用它!!!q样的话如果是经常要用的临时表请使用实表Q或者时表变量?br />
37、一般在GROUP BY 个HAVING字句之前p剔除多余的行Q所以尽量不要用它们来做剔除行的工作。他们的执行序应该如下最优:select 的Where字句选择所有合适的行,Group By用来分组个统计行QHaving字句用来剔除多余的分l。这样Group By 个Having的开销,查询?对于大的数据行进行分l和Having十分消耗资源。如果Group BY的目的不包括计算Q只是分l,那么用Distinct更快
38、一ơ更新多条记录比分多ơ更新每ơ一条快,是说批处理?br />
39、少用时表Q尽量用l果集和TablecL的变量来代替它,Table cd的变量比临时表好
40、在SQL2000下,计算字段是可以烦引的Q需要满的条g如下Q?br />
a、计字D늚表达是确定的
b、不能用在TEXT,NtextQImage数据cd
c、必配制如下选项 ANSI_NULLS = ON, ANSI_PADDINGS = ON, …….
41、尽量将数据的处理工作放在服务器上,减少|络的开销Q如使用存储q程。存储过E是~译好、优化过、ƈ且被l织C个执行规划里、且存储在数据库中的SQL语句Q是控制语a的集合,速度当然快。反复执行的动态SQL,可以使用临时存储q程Q该q程(临时?被放在Tempdb中。以前由于SQL SERVER对复杂的数学计算不支持,所以不得不这个工作放在其他的层上而增加网l的开销。SQL2000支持UDFs,现在支持复杂的数学计,函数的返回g要太大,q样的开销很大。用戯定义函数象光标一h行的消耗大量的资源Q如果返回大的结果采用存储过E?br />
42、不要在一句话里再三的使用相同的函敎ͼ费资源,结果放在变量里再调用更?br />
43、Select COUNT(*)的效率教低,量变通他的写法,而EXISTS?同时h意区别: select count(Field of null) from Table ?nbsp;select count(Field of NOT null) from Table 的返回值是不同?!!
44、当服务器的内存够多Ӟ配制U程数量 = 最大连接数+5Q这栯发挥最大的效率;否则使用 配制U程数量<最大连接数启用SQL SERVER的线E池来解?如果q是数量 = 最大连接数+5Q严重的损害服务器的性能?br />
45、按照一定的ơ序来访问你的表。如果你先锁住表AQ再锁住表BQ那么在所有的存储q程中都要按照这个顺序来锁定它们。如果你(不经意的)某个存储q程中先锁定表BQ再锁定表AQ这可能׃D一个死锁。如果锁定顺序没有被预先详细的设计好Q死锁很难被发现
46、通过SQL Server Performance Monitor监视相应g的负?nbsp;Memory: Page Faults / sec计数器如果该值偶走高,表明当时有线E竞争内存。如果持l很高,则内存可能是瓉?br />
Process:
1? DPC Time 指在范例间隔期间处理器用在缓延程序调?DPC)接收和提供服务的癑ֈ比?DPC 正在q行的ؓ比标准间隔优先权低的间隔)?nbsp;׃ DPC 是以Ҏ模式执行的,DPC 旉的百分比为特权时间百分比的一部分。这些时间单独计ƈ且不属于间隔计算L的一?nbsp;分。这个L昄了作为实例时间百分比的^均忙时?br />
2?Processor Time计数器 如果该参数值持l超q?5%Q表明瓶颈是CPU。可以考虑增加一个处理器或换一个更快的处理器?br />
3? Privileged Time 指非闲置处理器时间用于特权模式的癑ֈ比?Ҏ模式是ؓ操作pȝlg和操U늡仉动程序而设计的一U处理模式。它允许直接讉Kg和所有内存。另一U模式ؓ用户模式Q它是一Uؓ应用E序、环境分pȝ和整数分pȝ设计的一U有限处理模式。操作系l将应用E序U程转换成特权模式以讉K操作pȝ服务)。特权时间的 % 包括为间断和 DPC 提供服务的时间。特权时间比率高可能是由于失败设备生的大数量的间隔而引L。这个计数器^均忙时作为样本时间的一部分昄?br />
4? User Time表示耗费CPU的数据库操作Q如排序Q执行aggregate functions{。如果该值很高,可考虑增加索引Q尽量用简单的表联接,水^分割大表格等Ҏ来降低该倹{?nbsp;Physical Disk: Curretn Disk Queue Length计数器该值应不超q磁盘数?.5~2倍。要提高性能Q可增加盘?nbsp;SQLServer:Cache Hit Ratio计数器该D高越好。如果持l低?0%Q应考虑增加内存?nbsp;注意该参数值是从SQL Server启动后,׃直篏加记敎ͼ所以运行经q一D|间后Q该值将不能反映pȝ当前倹{?br />84 <!---->
47、分析select emp_name form employee where salary > 3000 在此语句中若salary是Floatcd的,则优化器对其q行优化为Convert(float,3000)Q因?000是个整数Q我们应在编E时使用3000.0而不要等q行时让DBMSq行转化。同样字W和整型数据的{换?
48、查询的兌同写的顺?br /> select a.personMemberID, * from chineseresume a,personmember b where personMemberID = b.referenceid and a.personMemberID = 'JCNPRH39681' QA = B ,B = 'L'Q?nbsp; select a.personMemberID, * from chineseresume a,personmember b where a.personMemberID = b.referenceid and a.personMemberID = 'JCNPRH39681' and b.referenceid = 'JCNPRH39681' QA = B ,B = 'L'Q?nbsp;A = 'L'Q?nbsp; select a.personMemberID, * from chineseresume a,personmember b where b.referenceid = 'JCNPRH39681' and a.personMemberID = 'JCNPRH39681' QB = 'L'Q?nbsp;A = 'L'Q?nbsp; 49?br /> (1)IF 没有输入负责Z?nbsp;THEN code1=0 code2=9999 ELSE code1=code2=负责Z?nbsp;END IF 执行SQL语句? Select 负责人名 FROM P2000 Where 负责Z?gt;=:code1 AND负责Z?nbsp;<=:code2 <clk></clk> (2)IF 没有输入负责Z?nbsp;THEN Select 负责人名 FROM P2000 ELSE code= 负责Z?nbsp;Select 负责Z?nbsp;FROM P2000 Where 负责Z?:code END IF W一U方法只用了一条SQL语句,W二U方法用了两条SQL语句。在没有输入负责Z码时,W二U方法显然比W一U方法执行效率高,因ؓ它没有限制条? 在输入了负责Z码时,W二U方法仍然比W一U方法效率高,不仅是少了一个限制条?q因相等q算是最快的查询q算。我们写E序不要怕麻?br /> 50、关于JOBCN现在查询分页的新Ҏ(如下)Q用性能优化器分析性能的瓶颈,如果在I/O或者网l的速度上,如下的方法优化切实有效,如果在CPU或者内存上Q用现在的方法更好。请区分如下的方法,说明索引小好?br /> begin DECLARE @local_variable table (FID int identity(1,1),ReferenceID varchar(20)) insert into @local_variable (ReferenceID) select top 100000 ReferenceID from chineseresume order by ReferenceID select * from @local_variable where Fid > 40 and fid <= 60 end ?nbsp; begin DECLARE @local_variable table (FID int identity(1,1),ReferenceID varchar(20)) insert into @local_variable (ReferenceID) select top 100000 ReferenceID from chineseresume order by updatedate select * from @local_variable where Fid > 40 and fid <= 60 end 的不?nbsp; begin create table #temp (FID int identity(1,1),ReferenceID varchar(20)) insert into #temp (ReferenceID) select top 100000 ReferenceID from chineseresume order by updatedate select * from #temp where Fid > 40 and fid <= 60 drop table #temp end 另附Q存储过E编写经验和优化措施 FromQ网|学网 一、适合读者对象:数据库开发程序员Q数据库的数据量很多Q涉及到对SP(存储q程)的优化的目开发h员,Ҏ据库有浓厚兴的人?br /> 二、介l:在数据库的开发过E中Q经怼遇到复杂的业务逻辑和对数据库的操作Q这个时候就会用SP来封装数据库操作。如果项目的SP较多Q书写又没有一定的规范Q将会媄响以后的pȝl护困难和大SP逻辑的难以理解,另外如果数据库的数据量大或者项目对SP的性能要求很,׃遇到优化的问题,否则速度有可能很慢,l过亲nl验Q一个经q优化过的SP要比一个性能差的SP的效率甚至高几百倍?br /> 三、内容: 1、开发h员如果用到其他库的Table或ViewQ务必在当前库中建立View来实现跨库操作,最好不要直接?#8220;databse.dbo.table_name”Q因为sp_depends不能昄SP所使用的跨库table或viewQ不方便校验?br /> 2、开发h员在提交SP前,必须已经使用set showplan on分析q查询计划,做过自n的查询优化检查?br /> 3、高E序q行效率Q优化应用程序,在SP~写q程中应该注意以下几点: a)SQL的用规范: i. 量避免大事务操作,慎用holdlock子句Q提高系lƈ发能力?br /> ii. 量避免反复讉K同一张或几张表,其是数据量较大的表Q可以考虑先根据条件提取数据到临时表中Q然后再做连接?br /> iii. 量避免使用游标Q因为游标的效率较差Q如果游标操作的数据过1万行Q那么就应该改写;如果使用了游标,p量避免在游标@环中再进行表q接的操作?br /> iv. 注意where字句写法Q必考虑语句序Q应该根据烦引顺序、范围大来定条g子句的前后顺序,可能的让字D顺序与索引序怸_范围从大到小?br /> v. 不要在where子句中的“=”左边q行函数、算术运或其他表达式运,否则pȝ可能无法正用烦引?br /> vi. 量使用exists代替select count(1)来判断是否存在记录,count函数只有在统计表中所有行数时使用Q而且count(1)比count(*)更有效率?br /> vii. 量使用“>=”Q不要?#8220;>”?br /> viii. 注意一些or子句和union子句之间的替?br /> ix. 注意表之间连接的数据cdQ避免不同类型数据之间的q接?br /> x. 注意存储q程中参数和数据cd的关pR?br /> xi. 注意insert、update操作的数据量Q防止与其他应用冲突。如果数据量过200个数据页?400k)Q那么系l将会进行锁升Q页U锁会升U成表锁?br /> b)索引的用规范: i. 索引的创与应用结合考虑Q徏议大的OLTP表不要超q?个烦引?br /> ii. 可能的使用索引字段作ؓ查询条gQ尤其是聚簇索引Q必要时可以通过index index_name来强制指定烦?br /> iii. 避免对大表查询时q行table scanQ必要时考虑新徏索引?br /> iv. 在用烦引字D作为条件时Q如果该索引是联合烦引,那么必须使用到该索引中的W一个字D作为条件时才能保证pȝ使用该烦引,否则该烦引将不会被用?br /> v. 要注意烦引的l护Q周期性重建烦引,重新~译存储q程?br /> c)tempdb的用规范: i. 量避免使用distinct、order by、group by、having、join、cumputeQ因些语句会加重tempdb的负担?br /> ii. 避免频繁创徏和删除时表Q减系l表资源的消耗?br /> iii. 在新Z时表Ӟ如果一ơ性插入数据量很大Q那么可以用select into代替create tableQ避免logQ提高速度;如果数据量不大,Z~和pȝ表的资源Q徏议先create tableQ然后insert?br /> iv. 如果临时表的数据量较大,需要徏立烦引,那么应该创Z时表和徏立烦引的q程攑֜单独一个子存储q程中,q样才能保证pȝ能够很好的用到该时表的烦引?br /> v. 如果使用C临时表,在存储过E的最后务必将所有的临时表显式删除,先truncate tableQ然后drop tableQ这样可以避免系l表的较长时间锁定?br /> vi. 慎用大的临时表与其他大表的连接查询和修改Q减低系l表负担Q因U操作会在一条语句中多次使用tempdb的系l表?br /> d)合理的算法用: Ҏ上面已提到的SQL优化技术和ASE Tuning手册中的SQL优化内容,l合实际应用,采用多种法q行比较,以获得消耗资源最、效率最高的Ҏ。具体可用ASE调优命oQset statistics io on, set statistics time on , set showplan on {?nbsp; 转自Q?a >http://fableking.iteye.com/blog/360900
]]> E序员必ȝ道的SQLSERVER数据库优化技?/title> http://www.aygfsteel.com/allrounder/archive/2011/08/13/356455.html[ 王志?] [ 王志?] Sat, 13 Aug 2011 04:34:00 GMT http://www.aygfsteel.com/allrounder/archive/2011/08/13/356455.html http://www.aygfsteel.com/allrounder/comments/356455.html http://www.aygfsteel.com/allrounder/archive/2011/08/13/356455.html#Feedback 0 http://www.aygfsteel.com/allrounder/comments/commentRss/356455.html http://www.aygfsteel.com/allrounder/services/trackbacks/356455.html 摘要Q数据库优化不仅是数据库理员的dQ程序员也必ȝ道一些优化技巧,有利于开发高效的数据库系l? 关键字:数据?优化 技? 如果是团队开发,作ؓE序员必ȝ道本文描q的数据库优化技巧,如果你的sa水^比较差,那即使你再努力也些不出高效的数据库应用系l? 如果是单独开发,那就更不必说了? 多数公司的数据库理?sa)是不够格的,即拿了各种认证证gQ也差不多还是垃圄理员Q无非是可以混个好职位,多拿一些工资? 如果你所在的公司没有合格的saQ作为程序员的你必须执行做许多数据库优化的工作了? 市面上的数据库类图书也不q是骗钱的把戏,无非ZZ而出书,Z出名而出书? 95Q以上的作者没有实늚l验Q?9Q以上的作者没有优化的l验。他们编写图书的来源无非是外文(不见得好啊)或者是互联|上的资讯? 废话不说了,开始吧。程序员U别的优化有哪些手段Q? Q?Q数据库的设|:如果你的数据库记录数不会过30万条Q如果你的数据库记录过100万条Q该如何讄数据库?一个或多个Q? Q?Q数据库表的讄Q当你的某个数据库表记录过100万别,而且每天大量增长Q这是一个不得不考虑的问题。如果你的系l浏览量很大Q即使是30万条记录也是需要考虑的? Q?Q烦引的使用Q烦引可以大大提高数据库讉K速度。什么时候用Q哪些字D用? Q?Q存储过E的使用Q存储过E终归是比较好的Q但是如果需要维护成百上千的存储q程Q未必是划算的工E? Q?Q高效的分页技术:数据库记录分列表是大量必须使用的基本技术,怎样的分|快速的Q? 宗旨你需要从上述5个方面考虑数据库的优化? 什么时候需要数据库优化Q? Q?Q编写代码之前; Q?Q系l速度慢了的时候; 下面是一些具体的优化技巧了?Q?Q超大量记录数据库的优化技?/strong> 如果你的数据库表记录有超q?00万别,而且不断增长中。可以采取两个手D: W一Q将数据库表拆分C同的库中Q比?tblMEMBER 可以拆分到 DB1 ?DB2 中去? 实际上,可以拆分?DB001 ... DB100 甚至更多的库中间厅R? DB1 ?DB2 最好不在一块硬盘上? W二Q如果更大量U的数据Q则最好拆分到不同的数据库服务器中厅R? 数据库的拆分带来的是查询{操作的复杂性。简单地可以通过 hash 或?按序?匚w不同的数据库。复杂一些,应该讄一个独立的应用服务器(软gQ协调其中的操作?Q?Q中{量U数据库的优化技?/strong> 所谓中{量U数据库是指数据?00万-500万条记录左右Q单个数据库表)。这L数据库ؓ了提高访问(响应Q速度Q可以将表拆分到更小的表。比?tblMEMBER 可以拆分?tblMEMBER_00 ... tblMEMBER_99 ? q样可以保证每个表的记录C过50万,那速度?相当"快了?Q?Q避免用视?viewport)与关?/strong> 视图viewport与关联都是ؓ了程序员处理相对复杂的数据管理提供方便的手段。万物有其利Q必有其弊。视囑֒兌提高了编E效率,都会较大地媄响数据库的访问效率(事实上ƈ不像一般资料说介绍的的那样高效Q,因此如果是web应用Q则一般不要用视图与兌?Q?Q不要忘记烦?index)也不要滥用烦?index) 索引是提高数据库效率的简单又高效的方法。只要是讄了数据库?table)Q就不要忘记讄索引(index)。将索引讄在经常用于排序的字段上,其他字段׃要设|了? 索引不是多好Q也不是什么字D都适合建立索引的。数据重复性太多的字段不要讄索引。比?tblMEMBER ?iSex 字段只有 0 1 两个|׃要设|烦引?Q?Q二q制?text image {字D应该单独设|别的表?/strong> 一般的数据库应用难免都需要保存比如描q、图片等信息Q一般描q类信息?text 字段Q图片类信息?image 字段Q这里要说的是,不要这些字D与其他字段攑֜一个表中? 比如Q?
1 tblMEMBER 2 id (int ) 3 cName (varchar )( 64 ) 4 cDescription (text ) 5 bPhoto (image ) 6 dDate (datetime ) 7 应该拆分ؓ3个表 8 tblMEMBER 9 id (int ) 10 cName (varchar )( 64 ) 11 dDate (datetime ) 12 tblMEMBER_DESC13 id (int ) 14 cDescription (text ) 15 dDate (datetime ) 16 tblMEMBER_PHOTO17 id (int ) 18 bPhoto (image ) 19 dDate (datetime ) 20 Q?Q不要用文本类型的 id 一般的数据库表都会以一个种子字D作Z键。可以在与不年青的E序员朋友沟通过E中Q发C们很喜欢用字W串cd的作为系l的 id 受? 比如Qid = XX XX XX XX q样的字W串Q每两个位置代表不同的类别等含义? 不知道是那本教材如此误h子弟Q作L表率 :< 作ؓpȝ?id P一定要使用数字型的?Q?Q数据库表table的字Dfield不要太多 本以为无需说明Q也是发C的朋友Qؓ了省事,一股脑把所有的相关字段都放在一个表中间。这样做的后果便是,E序写v来简单了Q运行效率下来了? 无论字段多少Q有两类字段是必ȝ立出ȝQ一是进E更新的字段Q比如文章的点击ơ数字段iShowQ二是二q制或者是text字段Q?Q?Q将字符?varchar)比较变成数字?int)比较 每个pȝ都会有用L理,其中必然?늧Q密码,邮g{的字符串类型数据比较的问题。在数据库操作中Q字W串比较的效率是相当低下的。因此遇到字W串的比较,必须其转换为数字型比较? 具体做法是:在数据库表中增加相应的数字字D,比如 cNickname -> iNickNumber Q其?iNickNumber 的数gؓ cNickname ?哈希|如何计算字符串的哈希|请参阅本站的其他文章Q? 通过q样的{换,pȝ效率可以提高 100 倍哦Q!Q?Q?Qؓ每个数据库表(table)讄 datetime 字段 在许多情况下Q很多的表是不需?datetime 字段用于保存旉的。本文的是你应该为每个表都设|?datetime 字段Q而且默认gؓ getdate()? 我们的经验是Qdatetime 是实敎ͼ占用字节不多Q在q行pȝl护Q远E备份等环节都会发挥意想不到的效果?Q?0Q适当使用存储q程(Stored Processing) 存储q程(sp)已经被大大地宣传了,本文也不例外地赞讔R用存储过E。本文的是只在下列情冉|使用存储q程Q一是一个业务处理是事务Q包含了多个处理q程Q二是一U处理被高频使用Q用存储过E可以提高效率; Q?1Q用高效的分页(ination)技?/strong> 数据库记录分列表是大量必须使用的基本技术,因此?文徏议你在每个数据库中徏立下面的存储q程Q?
1 CREATE PROCEDURE xsp_ination 2 ( 3 @tblName varchar ( 64 ), 4 @strGetFields varchar ( 256 ) = " * ", 5 @fldName varchar ( 64 ) = "", 6 @PageSize int = 20 , 7 @PageIndex int = 1 , 8 @OrderType bit = 1 , 9 @strWhere varchar ( 256 ) = "" 10 )11 AS 12 BEGIN 13 declare @strSQL varchar ( 1000 ) 14 declare @strTmp varchar ( 110 ) 15 declare @strOrder varchar ( 400 ) 16 SET NOCOUNT ON 17 if @OrderType != 0 18 begin 19 set @strTmp = " & lt;( select min " 20 set @strOrder = " order by [ " + @fldName +" ] desc " 21 end 22 else 23 begin 24 set @strTmp = " & gt;( select max " 25 set @strOrder = " order by [ " + @fldName +" ] asc " 26 end 27 if @PageIndex = 1 28 begin 29 if @strWhere != "" 30 set @strSQL = " select top " + str ( @PageSize ) + " " + @strGetFields + " from " + @tblName + " where " + @strWhere + " " + @strOrder 31 else 32 set @strSQL = " select top " + str ( @PageSize ) + " " + @strGetFields + " from " + @tblName + " " + @strOrder 33 end 34 else 35 begin 36 set @strSQL = " select top " + str ( @PageSize ) + " " + @strGetFields + " from " 37 + @tblName + " where [ " + @fldName + " ] " + @strTmp + "( [ "+ @fldName + " ] ) from ( select top " + str (( @PageIndex - 1 ) * @PageSize ) + " [ "+ @fldName + " ] from " + @tblName + " " + @strOrder + ") as tblTmp)" + @strOrder 38 if @strWhere != "" 39 set @strSQL = " select top " + str ( @PageSize ) + " " + @strGetFields + " from " 40 + @tblName + " where [ " + @fldName + " ] " + @strTmp + "( [ " 41 + @fldName + "] ) from ( select top " + str (( @PageIndex - 1 ) * @PageSize ) + " [ " 42 + @fldName + "] from " + @tblName + " where " + @strWhere + " " 43 + @strOrder + ") as tblTmp) and " + @strWhere + " " + @strOrder 44 end 45 EXEC ( @strSQL ) 46 if @@error = 0 return 1 47 SET NOCOUNT OFF 48 END 49 GO 50 使用Ҏ?C#)Q?
sql = " EXEC [dbo].[xsp_ination] \ " tblNEWS\ " ,\ " * \ " ,\ " id\ " ,40, " + pindex.ToString() + " ,1,\ " iType = " + type.ToString(); SqlDataReader sr = ExecuteReader(sql); while (sr.Read()) { } sr.Close(); 上面的优化技巧仅是一些常见的手段Q如果你的系l(系l就了Q遇到效率问题,可以与联高Y件联pR? 转蝲本文h明出处,以便遇到优化困难的朋友可以找到联高提供帮助? ]]> 大型门户|站架构分析Q{载) http://www.aygfsteel.com/allrounder/articles/356454.html[ 王志?] [ 王志?] Sat, 13 Aug 2011 04:29:00 GMT http://www.aygfsteel.com/allrounder/articles/356454.html http://www.aygfsteel.com/allrounder/comments/356454.html http://www.aygfsteel.com/allrounder/articles/356454.html#Feedback 0 http://www.aygfsteel.com/allrounder/comments/commentRss/356454.html http://www.aygfsteel.com/allrounder/services/trackbacks/356454.html 千万人同时访问的|站Q一般是有很多个数据库同时工作,说明白一点就是数据库集群和ƈ发控Ӟq样的网站实时性也是相对的。这些网站都有一些共同的特点Q数据量大,在线人数多,q发h多,pageview高,响应速度快。ȝ了一下各个大|站的架构,主要提高效率及稳定性的几个地方包括Q?br /> 1、程?br />E序开发是一斚wQ系l架构设计(g+|络+软gQ是另一斚w?br />软g架构斚wQ做|站首先需要很多web服务器存储静态资源,比如囄、视频、静态页{,千万不要把静态资源和应用服务器放在一赗?br />一个好的程序员写出来的E序会非常简z、性能很好Q一个初U程序员可能会犯很多低错误Q这也是影响|站性能的原因之一?br />|站要做到效率高Q不光是E序员的事情Q数据库优化、程序优化这是必ȝQ在性能优化上要数据库和E序齐头q进Q缓存也是两斚w同时入手。第一Q数据库~存和数据库优化Q这个由dba完成Q而且q个有非常大的潜力可挖,只是׃我们都是E序员而忽略了他而已Q。第二,E序上的优化Q这个非常的有讲IӞ比如说重要一点就是要规范QIQ语句,用in 多用orQ多用preparestatement 存储q程Q另外避免程序冗余如查找数据用双重循环{。另外选用优秀的开源框架加以支持,我个Z后台的支持是最最重要的,可以选取springQibatis。因为ibatis直接操作SQLq有~存机制。spring的好处就不用我多说了QテQE的机制可以避免new对象Q这样也节省开销。据我分析,l大部分的开销是在NEW的时候和q接数据库时候生的Q请量避免。另外可以用一?span style="text-decoration: underline">内存试工具来做一个demo说明hibernate和ibatis谁更快!前台你想用什么就用什么,struts,webwork都成Q如果觉得自己挺牛X可以试试用tapestry?br />用数据库也未必不能解册问量巨大所带来的问题,作成静态文件硬盘的d旉也未必少于数据库的搜索时_当然对资料的索引要下一d夫。我自己觉得门户往往也就是当天、热门的资料点击率较高,其做缓存最多也不过1~2G的数据量吧,举个例子Q?br /> ◎ 拿网易新L?a target="_blank">http://news.163.com/07/0606/09/3GA0D10N00011229.html 格式化一下,方便理解Qhttp://域名/q?月日/新闻所属分c?新闻ID.html 可以把当天发布的、热门的、浏览量大的作个~存Q用hashtableQkeyQ年-??分类-IDQvalueQ新d象)Q静态将其放到内存(速度l对快过盘d静态页面)?br /> 通常是采用oracle存储q程Q?个weblogicQ?span style="text-decoration: underline">更新机制也几乎一h{֏一条新闻,׃生成静态页面,然后发往前端?/span>web 服务器,前端的web 都是做负载均衡的 。另外还有定时程序,?-15分钟自动生成一ơ?span style="text-decoration: underline">在发布新ȝ同时数据缓?/span>。当然缓存也不会来大Q在个特定的旉D(如凌晨)删除q期的数据。做一个大的网站远没有惌中那么简单,服务器基本就要百十个的?br />q样可以大大增加一台计机的处理速度Q如果一台机器处理不了,可以用httpserver集群来解决问题了?br /> 2、网l?br />中国的网l分南电信和北网通,讉K的ipp区分南北q入不同的网l?br /> 3、集?br />通常会用CDN与GSBL与DNS负蝲均衡技术,每个地区一l前台服务器,比如新浪和搜狐,而网易,癑ֺ使用了DNS负蝲均衡技术,每个频道一l前台服务器Q一搜用了DNS负蝲技术,所有频道共用一l前台服务器集群?br />|站使用ZLinux集群的负载均衡,p|恢复Q包括应用服务器和数据库服务器,Zlinux-ha的服务状态检及高可用化?br />应用服务器集可以采用apache+tomcat集群和weblogic集群{;web服务器集可以用反向代理Q也可以用NAT的方式,或者多域名解析都可以;Squid也可以,Ҏ很多Q可以根据情况选择?br /> 4、数据库 因ؓ是千万h同时讉K的网站,所以一般是有很多个数据库同时工作的Q说明白一点就是数据库集群和ƈ发控Ӟ数据分布到地理位|不同的数据中心Q以免发生断电事故?/p>
L的数据库有Sun的是MySQL和Oracle?br />Oracle是一ƾ优U的、广泛采用的商业数据库管理Y件。有很强大的功能和安全性,可以处理相对量的数据。而MySQL是一N怼U的开源数据库理软gQ非帔R合用多台PC Serverl成多点的存储节炚w?q里我所指的不是MySQL自n提供的集功?Q每单位的数据存储成本也非常的低廉。用多台PC Server安装MySQLl成一个存储节炚w列,通过MySQL自n的Replication或者应用自w的处理Q可以很好的保证定w(允许部分节点失效)Q保证应用的健壮性和可靠性。可以这么说Q在关系数据库管理系l的选择上,可以考虑应用本n的情冉|军_?/p>
MySQL数据库服务器的master-slave模式Q利用数据库服务器在M服务器间q行同步Q应用只把数据写C服务器,而读数据时则Ҏ负蝲选择一C服务器或者主服务器来dQ将数据按不同策略划分到不同的服务器Q组Q上Q分散数据库压力?/p>
另外q有一点的是,那些|站的静态化|页q不是真的,而是通过动态网与静态网늽址交换所出现的假?/span>Q这可以用urlrewriteq样的开源网址映射器实现。这L|站实时性也是相对的Q因为在数据库复制数据的时候有一个过E,一?span style="text-decoration: underline">在技术上可以用到 hibernate 和ecache Q但是如果要使网站工作地更好Q?span style="text-decoration: underline">可以使用EJB 和websphere Qweblogic q样大型的服务器来支持,q且要用oracleq样的大型数据库?br />大型门户|站不徏议用Mysql数据库,除非你对Mysql数据的优化非常熟悉。Mysql数据库服务器的master-slave模式Q利用数据库服务器在M服务器间q行同步Q?span style="text-decoration: underline">应用只把数据写到L务器Q而读数据时则Ҏ负蝲选择一C服务器或者主服务器来dQ将数据按不同策略划分到不同的服务器Q组Q上Q分散数据库压力?/span> 大型|站要用oracleQ数据方面操作尽量多用存储过E,l对提升性能Q同时要让DBAҎ据库q行优化Q优化后的数据库与没优化的有天壤之别Q同时还可以扩展分布式数据库Q以后这斚w的研I会来多Q?br /> 5、页?br />从开始就考虑使用虚拟存储/文件系l。它能让你大量ƈ行IO讉KQ而且不需要Q何重l就能够增加所需要的盘?br />面数据调用更要认真设计Q一些数据查询可以不通过数据库的方式Q实时性要求不高的可以使用lucene来实玎ͼ即有实时性的要求也可以用luceneQ基于Java的全文烦?索引擎)Qlucene+compassq是非常优秀的?br />新闻cȝ|站可以用静态页存储Q采用定时更新机制减L务器负担 Q首|个小模块可以使用oscache~存Q这样不用每ơ都拉数据?br />前端的基于静态页面缓存的web加速器Q主要应用有squid{?span style="text-decoration: underline">squid 大部分静态资? 囄Qjs Qcss {)~存hQ直接返回给讉K者,减少应用服务器的负蝲 |站的静态化|页q不是真的,而是通过动态网与静态网늽址交换做出现的假象Q这可以用urlrewriteq样的开源网址映射器实玎ͼ后缀名ؓhtm或者htmlq不能说明程序生成了静态页面,可能是通过url重写来实现的Qؓ的只不过是在搜烦引擎中提升自q站的覆盖面积|了?br />生成静态页面的服务器和www服务器是两组不同的服务器Q页面生成后才会到www服务器,一部分数据库ƈ不是关系数据库,q样更适合信息衍生Qwww、mail服务器、\由器多,主要用负载^衡解册问瓶颈?br />◎ 静态页面的~点Q?br />1) 增加了程序的复杂?br />2) 不利于管理资?br />3) 速度不是最?br />4) 伤硬?br /> 6、缓?br />从一开始就应该使用~存Q高速缓存是一个更好的地方存储临时数据Q比如Web站点上跟t一个特定用L会话产生的时文Ӟ׃再需要记录到数据库里?br />不能用lucene 实现的可以用~存Q分布式~存可以用memcached Q如果有q话用10来台机器做缓存,> 10G的存储量怿存什么都够了Q如果没q话可以在面~存和数据缓存上下功夫,多用OSCACHE和EHCACHEQSWARMCACHE也可以,不过据说同步性不是很好; 可以使用MemcacheQ分布式~存Q进行缓存,用大内存把这些不变的数据全都~存hQ而当修改时就通知cacheq期Qmemcache是LJ开发的一Ƒֈ布式~存产品Q很多大型网站在应用Q我们可以把Cache Server 与App Server 装在一?/span>。因为Cache Server对CPU消耗不大,而有了Cache Server的支_App Server对内存要求也不是太高Q所以可以和q_处,更有效的利用资源?/p>
单机内存~存、文件缓存、数据库~存{的{略都是可以很简单的实现的,例如可以使用微Y的Caching Application BlockQ但如何在集环境中使多个缓存、多层缓存ƈ保存同步是个重大问题。大型网站一般都使用~存服务器群Qƈ使用多层~存。业内最常用的有Q?/p>
Squid cacheQSquid服务器群Q把它作为web服务器端前置cache服务器缓存相兌求来提高web服务器速度。Squid大部分静态资?囄QjsQcss{)~存hQ直接返回给讉K者,减少应用服务器的负蝲
memcache Qmemcache服务器群Q一Ƒֈ布式~存产品Q很多大型网站在应用; 它可以应对Q意多个连接,使用非阻塞的|络IO。由于它的工作机制是在内存中开辟一块空_然后建立一个HashTableQMemcached自管理这些HashTable。因为通常|站应用E序中最耗费旉的Q务是数据在数据库的检索,而多个用h询相同的SQLӞ数据库压力会增大Q而通过memcache的查询缓存命中,数据直接从memcache内存中取Q每ơ缓存命中将替换到数据库服务器的一ơ往q,到达数据库服务器的请求更,间接地提高了数据库服务器的性能Q从而应用E序q行得更快。它通过Z内存~存对象来减数据库查询的方式改善网站系l的反应Q其最吸引人的一个特性就是支持分布式部v。有关memcacheQ以下文章可以参考:参? Q?a target="_blank">参? Q?a target="_blank">参?官方站点 ?/p>
e-Accelerator Q比较特D,PHP的缓存和加速器。是一个免费开源的PHP加速、优化、编译和动态缓存的目Q它可以通过~存PHP代码~译后的l果来提高PHP脚本的性能Q得一向很复杂和离我们很远?PHP脚本~译问题完全得到解决。通过使用eAcceleratorQ可以优化你的PHP代码执行速度Q降低服务器负蝲Q可以提高PHP应用执行速度最高达10倍?/p>
7、服务器操作pȝ与Web服务?br />最底层首先是操作系l。好的操作系l能提高好的性能、稳定性和安全性,而这些对大型|站的性能、安全性和E_性都是至关重要的?/p>
淘宝|(阉K巴巴 Q? Linux 操作pȝ + Web 服务? Apache 新浪QFreeBSD + Web 服务器:Apache YahooQFreeBSD + Web 服务器:自己?/li> Google : 部分Linux + Web 服务器:自己?/li>癑ֺ QLinux + Web 服务? Apache|易QLinux + Web 服务? Apache eBay: Windows Server 2003/8 (大量) + Web 服务器:Microsoft IIS MySpace: Windows Server 2003/8 + Web 服务器:Microsoft IIS
由此可见Q开源操作系l做Web应用是首选已l是一个既定事实。在开源操作系l中Linux和FreeBSD差不太多Q很难说哪个一定比另外一个要优秀很多、能够全面的越ҎQ应该是各有所ѝ但熟悉Linux?span>技?/span>人员更多些,利于pȝ理 、优化等Q所以Linux使用更广泛。而Windows Server和IIS虽然有的|站使用Q但不开源,而且需要购?span>微Y
的一pd应用产品Q限制了其用。MQ开源操作系l,其是Linux做Web应用是首选已l是一个既定事实?br />常用的系l架构是:
Linux + Apache + PHP + MySQL Linux + Apache + Java (WebSphere) + Oracle Windows Server 2003/2008 + IIS + C#/ASP.NET + 数据?
以上一些不太成熟的xQ可以从某一个层ơ开始,逐步l化Q把产品的性能指标提高上去?br />
转自Q?a >http://blog.sina.com.cn/s/blog_56fd58ab0100o2hw.html ]]> SQL Server安装文g挂v错误解决办法 http://www.aygfsteel.com/allrounder/articles/353607.html[ 王志?] [ 王志?] Sun, 03 Jul 2011 14:23:00 GMT http://www.aygfsteel.com/allrounder/articles/353607.html http://www.aygfsteel.com/allrounder/comments/353607.html http://www.aygfsteel.com/allrounder/articles/353607.html#Feedback 0 http://www.aygfsteel.com/allrounder/comments/commentRss/353607.html http://www.aygfsteel.com/allrounder/services/trackbacks/353607.html 在运行窗口输入regeditQ打开注册表编辑器Q在HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\session Manager中找到PendingFileRenameOperationsQ删除该键|q个键值是安装E序暂挂目Q只要找到对应的应用E序清除掉就行了Q,关闭注册表编辑器。重新安装SQL Server 2000卛_?br /> Ҏ理收藏与下,以便查找?br />资料引用:http://www.knowsky.com/340304.html ]]> Sql Server 2000企业理器无法打开QMMCQ的解决Ҏ http://www.aygfsteel.com/allrounder/articles/353606.html[ 王志?] [ 王志?] Sun, 03 Jul 2011 14:22:00 GMT http://www.aygfsteel.com/allrounder/articles/353606.html http://www.aygfsteel.com/allrounder/comments/353606.html http://www.aygfsteel.com/allrounder/articles/353606.html#Feedback 0 http://www.aygfsteel.com/allrounder/comments/commentRss/353606.html http://www.aygfsteel.com/allrounder/services/trackbacks/353606.html MMC 不能打开文g C:\Program Files\Microsoft SQL Server\80\Tools\BINN\SQL Server Enterprise Manager.MSC?br /> 分析Q?br /> 参看文g是否存在或被损坏?br /> 无论那种Q先其删除 然后Q在q行框中输入 mmcQ打开控制?br /> 执行以下三个步骤Q?br /> 1、控制台--d/删除理单元--d--扑ֈMicrosoft SQL 企业理?-d--关闭--定 2、控制台--选项--控制台模式选择"用户模式完全讉K"--下面的选择全部取消 3、控制台--另存?-存储?C:\Program Files\Microsoft SQL Server\80\Tools\BINN\SQL Server Enterprise Manager.MSC 在第三步时可能会遇到“无法保存”Q这U现象?br /> 则在q行框中输入 regsvr32 C:\Windows\system32\msxml3.dll 然后再执行上面的W三步,卛_ 参考:http://www.leezao.cn/article.asp?id=467 ]]>使用Jstat监控gc情况 http://www.aygfsteel.com/allrounder/articles/351293.html[ 王志?] [ 王志?] Sun, 29 May 2011 15:08:00 GMT http://www.aygfsteel.com/allrounder/articles/351293.html http://www.aygfsteel.com/allrounder/comments/351293.html http://www.aygfsteel.com/allrounder/articles/351293.html#Feedback 0 http://www.aygfsteel.com/allrounder/comments/commentRss/351293.html http://www.aygfsteel.com/allrounder/services/trackbacks/351293.html 性能试q程中,我们该如何监控java虚拟机内存的使用情况Q用以判断JVM是否存在内存问题呢?如何判断JVM垃圾回收是否正常Q一般的top指o基本上满不了这L需求,因ؓ它主要监控的是M的系l资源,很难定位到java应用E序?br />在项目实践过E中Q我们探索和使用了一ƾ新工具Q-Jstat?br /> 先秀一下。Jstat是JDK自带的一个轻量工兗全U?#8220;Java Virtual Machine statistics monitoring tool”Q它位于java的bin目录下,主要利用JVM内徏的指令对Java应用E序的资源和性能q行实时的命令行的监控,包括了对Heap size和垃圑֛收状늚监控。可见,Jstat是轻量的、专门针对JVM的工P非常适用?br />那,该怎么用呢Q?br /> 语法l构如下Qjstat [Options] vmid [interval] [count] Options — 选项Q我们一般?-gcutil 查看gc情况 vmid — VM的进E号Q即当前q行的javaq程?br /> interval– 间隔旉Q单位ؓU或者毫U?br /> count — 打印ơ数Q如果缺省则打印无数?br /> 下面l出一个实际的例子Q?/p>
注:׃JVM内存讄较大Q图中百分比变化不太明显
图中参数含义如下Q?/p>
S0 — Heap上的 Survivor space 0 区已使用I间的百分比 S1 — Heap上的 Survivor space 1 区已使用I间的百分比 E — Heap上的 Eden space 区已使用I间的百分比 O — Heap上的 Old space 区已使用I间的百分比 P — Perm space 区已使用I间的百分比 YGC — 从应用程序启动到采样时发?Young GC 的次?br /> YGCT– 从应用程序启动到采样?Young GC 所用的旉(单位U? FGC — 从应用程序启动到采样时发?Full GC 的次?br /> FGCT– 从应用程序启动到采样?Full GC 所用的旉(单位U? GCT — 从应用程序启动到采样时用于垃圑֛收的L?单位U?
上图的示例,U框中,我们可以看到Q?ơyoung gc之后Q垃圑ֆ存被从Eden space?E)攑օ了Old space?O)Qƈ引v了百分比的变化,DSurvivor space使用的百分比?9.69%(S0)降到10.34%(S1)。有效释放了内存I间。绿框中Q我们可以看刎ͼ一ơfull gc之后QOld space?O)的内存被回收Q从36.81%降到35.01%?/p>
图中同时打印了young gc和full gc的L数、总耗时。而,每次young gc消耗的旉Q可以用盔R隔的两行YGCT相减得到。每ơfull gc消耗的旉Q可以用盔R的两行FGCT相减得到。例如红框中表示的第一行、第二行之间发生?ơyoung gcQ消耗的旉?2.281-52.252Q?.029U?/p>
帔R内存?P)的用率Q始l停留在37.6%左右Q说明常d存没有突变,比较正常?/p>
如果young gc和full gc能够正常发生Q而且都能有效回收内存Q常d存区变化不明显,则说明java内存释放情况正常Q垃圑֛收及Ӟjava内存泄露的几率就会大大降低。但也不能说明一定没有内存泄霌Ӏ?/p>
以上Q介l了Jstat按百分比查看gc情况的功能。其实,它还有其它功能,例如加蝲cM息统计功能、内存池信息l计功能{,那些是以l对值的形式打印出来的,比较用Q在此就不做介绍?/p>
Z更全面的监控JVM内存使用情况Q我们需要引入更强大的工hq一步分?#8211;JConsole。敬请关注?/p>
--------
一、概q?/strong>
SUN 的JDK中的几个工具Q非常好用。秉承着有免费,不用商用的原则。以下简单介l一下这几种工具?注:本文章下的所有工具都存在JDK5.0以上版本的工具集里,同javac一P不须Ҏ安装) ?br /> 我一共找C下四个工P重点看看jconsole和jmap?/p>
jps :与unix上的pscMQ用来显C本地的javaq程Q可以查看本地运行着几个javaE序Qƈ昄他们的进E号?nbsp; jstat :一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大及其内存用量?nbsp; jmap :打印出某个javaq程Q用pidQ内存内的,所?#8216;对象’的情况(如:产生那些对象Q及其数量)?nbsp; jconsole :一个java GUI监视工具Q可以以图表化的形式昄各种数据。ƈ可通过q程q接监视q程的服务器VM?/span>
二?使用介绍Q? 1、jstat Q我惛_多h都是用过unixpȝ里的ps命oQ这个命令主要是用来昄当前pȝ的进E情况,有哪些进E,及其 id?jps 也是一P它的作用是显C当前系l的javaq程情况Q及其id受我们可以通过它来查看我们到底启动了几个javaq程Q因为每一个javaE序都会独占一个java虚拟机实例)Q和他们的进E号Qؓ下面几个E序做准备)Qƈ可通过opt来查看这些进E的详细启动参数? 使用ҎQ在当前命o行下?jps(需要JAVA_HOMEQ没有的话,到改E序的目录下? ?/p>
可惜没有linux下的ps好用Q名UC好用。但是在W四个工具jconsole的界面里面会有具体JAR包的名称?br /> 2、jstat Q对VM内存使用量进行监控? jstat工具特别强大Q有众多的可选项Q详l查看堆内各个部分的使用量,以及加蝲cȝ数量。用时Q需加上查看q程的进EidQ和所选参数。以下详l介l各个参数的意义? jstat -class pid:昄加蝲class的数量,及所占空间等信息? jstat -compiler pid:昄VM实时~译的数量等信息? jstat -gc pid:可以昄gc的信息,查看gc的次敎ͼ及时间。其中最后五,分别是young gc的次敎ͼyoung gc的时_full gc的次敎ͼfull gc的时_gc的L间? jstat -gccapacity:可以昄QVM内存中三代(young,old,permQ对象的使用和占用大,如:PGCMN昄的是最perm的内存用量QPGCMX昄的是perm的内存最大用量QPGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以Ҏq个cLQ?OC是old内纯的占用量? jstat -gcnew pid:new对象的信息? jstat -gcnewcapacity pid:new对象的信息及其占用量? jstat -gcold pid:old对象的信息? jstat -gcoldcapacity pid:old对象的信息及其占用量? jstat -gcpermcapacity pid: perm对象的信息及其占用量? jstat -util pid:l计gc信息l计? jstat -printcompilation pid:当前VM执行的信息? 除了以上一个参数外Q还可以同时加上 两个数字Q如Qjstat -printcompilation 3024 250 6是每250毫秒打印一ơ,一共打?ơ,q可以加?h3每三行显CZ下标题? 3、jmap 是一个可以输出所有内存中对象的工P甚至可以VM 中的heapQ以二进制输出成文本。用方?jmap -histo pid。如果连?SHELL jmap -histo pid>a.log可以其保存到文本中去(windows下也可以使用Q,在一D|间后Q用文本对比工P可以Ҏ出GC回收了哪些对象。jmap -dump:format=b,file=f1 3024可以?024q程的内存heap输出出来到f1文g里? 4、jconsole 是一个用java写的GUIE序Q用来监控VMQƈ可监控远E的VMQ非常易用,而且功能非常强。由于是GUIE序Q这里就不详l介l了Q不会的地方可以参考SQN的官Ҏ档? 使用ҎQ命令行里打 jconsoleQ选则q程可以了? 友好提示Qwindows查看q程P׃d理器默认的情况下是不显CEidLQ所以可以通过如下Ҏ加上。ctrl+alt+del打开d理器,选择‘q程’选项卡,?#8216;查看’->''选择?'->加上''PID''Q就可以了。当然还有其他很好的选项?/p>
三、参考资料:
article:http://elf8848.javaeye.com/blog/442806
jps:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jps.html
jstat:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jstat.html
jmap:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jmap.html
jconsole:http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html
]]> PermGen space异常解决Ҏ http://www.aygfsteel.com/allrounder/articles/351292.html[ 王志?] [ 王志?] Sun, 29 May 2011 15:05:00 GMT http://www.aygfsteel.com/allrounder/articles/351292.html http://www.aygfsteel.com/allrounder/comments/351292.html http://www.aygfsteel.com/allrounder/articles/351292.html#Feedback 0 http://www.aygfsteel.com/allrounder/comments/commentRss/351292.html http://www.aygfsteel.com/allrounder/services/trackbacks/351292.html 我在?a href="http://www.aygfsteel.com/ynstudio/archive/2008/04/11/192205.html" target="_blank">TMS的发布工?/a>的时候,遇C问题Q这个工L目的是把一个相同的pȝQ在tomcat下自动的发布多䆾Q但当卸载,重新发布多次后, tomcat挂了,整个电脑如同L一般。后来用文章里的set JAVA_OPTS=-server -Xms800m -Xmx800m -XX:PermSize=64M-XX:MaxNewSize=256m-XX:MaxPermSize=128m -Djava.awt.headless=true 解决了问题,不过?G的电脑上Q我是把-XX:MaxPermSize=128m 调到?XX:MaxPermSize=256m。另外我q尝试了把所有的lib都放到tomcat的lib下,一些lib׃能在本项目中再出C? 现在看,q是springQhibernate之类的生的cd致PermGen spaceI间不造成的这些问题?br />http://www.javaeye.com/topic/80620?page=1 q个帖子里讨Zq个问题Q有人做了些有益的分析可以看看?br />我又l箋在我的笔记本上做了测试T42,1G内存。tomcat版本6.0.14?br />set JAVA_OPTS=-server -Xms256m -Xmx256m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=256m -Djava.awt.headless=true q个配置反复发布是可以的Q另外又一ơ测试了项目下的jar包放到tomcat的lib下的Ҏ。重新安装一个lib下ؓI的E序?0U,否则?0U?br /> ȝ一下: 1、修改tomcat的启动参敎ͼcM如下的样? set JAVA_OPTS=-server -Xms256m -Xmx256m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=256m
echo Using CATALINA_BASE: %CATALINA_BASE% echo Using CATALINA_HOME: %CATALINA_HOME% echo Using CATALINA_TMPDIR: %CATALINA_TMPDIR% if ""%1"" == ""debug"" goto use_jdk echo Using JRE_HOME: %JRE_HOME% goto java_dir_displayed :use_jdk echo Using JAVA_HOME: %JAVA_HOME% :java_dir_displayed echo Using JAVA_OPTS: %JAVA_OPTS% set JAVA_OPTS=-server -Xms256m -Xmx256m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=256m 2、将通用的lib文g攑ֈtomcat的目录下 ]]> POJO含义 http://www.aygfsteel.com/allrounder/archive/2011/04/19/348554.html[ 王志?] [ 王志?] Tue, 19 Apr 2011 03:00:00 GMT http://www.aygfsteel.com/allrounder/archive/2011/04/19/348554.html http://www.aygfsteel.com/allrounder/comments/348554.html http://www.aygfsteel.com/allrounder/archive/2011/04/19/348554.html#Feedback 0 http://www.aygfsteel.com/allrounder/comments/commentRss/348554.html http://www.aygfsteel.com/allrounder/services/trackbacks/348554.html POJOQPlain Old Java ObjectQ这U叫法是Martin Fowler、Rebecca Parsons和Josh MacKenzie?000q的一ơ演讲的时候提出来的?br />
我在做J2EE培训中发现我的很多学生问我什么是POJOQ后来我在写书(《Spring2初学者实跉|材》和《Spring3初学者实跉|材》)的时候发现POJOq个概念无法回避。现在网上对于POJO的解释很多,但是很多都是有错误的或者不够准。对此我一开始也是存在误区的Q我原来是这L解的Q?br />
POJO是这L一U?#8220;Ua?#8221;JavaBeanQ在它里面除了JavaBean规范的方法和属性没有别的东西,即private属性以及对q个属性方法的public的get和setҎ。我们会发现q样的JavaBean?#8220;单纯”Q它只能装蝲数据Q作为数据存储的载体Q而不h业务逻辑处理的能力?br />
所以下面的代码被认为是POJO了?/p>
package com.tongking.spring;
public class DbHello implements Hello {
private DictionaryDAO dao;
public void setDao(DictionaryDAO dao) {
this.dao = dao;
}
}
其实Q这L认ؓ是错误的Q我仔细阅读了《POJOs in Action》这本书的有关部分和POJO的最原始的出处http://martinfowler.com/bliki/POJO.htmlQ?br />
The term was coined while Rebecca Parsons, Josh MacKenzie and I were preparing for a talk at a conference in September 2000. In the talk we were pointing out the many benefits of encoding business logic into regular java objects rather than using Entity Beans. We wondered why people were so against using regular objects in their systems and concluded that it was because simple objects lacked a fancy name. So we gave them one, and it''s caught on very nicely.
基本的意思是我们要给h业务逻辑处理的规则的Java对象Qregular java objectsQv了一个名字——POJOQ这些Java对象不是EntityBeansQEJB的一U)?/p>
我又在http://www.webopedia.com/TERM/P/POJO.htm查到解释如下Q?/p>
POJO, or Plain Old Java Object, is a normal Java object class (that is, not a JavaBean, EntityBean etc.) and does not serve any other special role nor does it implement any special interfaces of any of the Java frameworks. This term was coined by Martin Fowler, Rebbecca Parsons and Josh MacKenzie who believed that by creating the acronym POJO, such objects would have a "fancy name", thereby convincing people that they were worthy of use.
基本意思是说POJO一个正规的Java对象Q不是JavaBeanQEntityBean{)Q也不担当Q何的Ҏ的角Ԍ也不实现MJava框架指定的接口?br />
我觉得上面的解释很准,POJO应该不是我们开始认为的JavaBeanQ当然更不是EJBQ它不应该依赖于框架即承或实现某些框架cL接口。例如:Struts1中的Action和ActionForm当然不属于POJO了,而在Struts2中的Action׃可以不承Q何的接口Q所以在q种情况下Action是POJOQ但是Struts2中的Action也可以承ActionSupportcd不再属于POJO了。POJO里面是可以包含业务逻辑处理和持久化逻辑Q也可以包含cM与JavaBean属性和对属性访问的set和getҎ的?br />
最后,我们ȝ一下给一个定义把QPOJO是一个简单的、正规Java对象Q它包含业务逻辑处理或持久化逻辑{,但不是JavaBean、EntityBean{,不具有Q何特D角色和不承或不实CQ何其它Java框架的类或接口?br />
文章出处Q飞诺网(www.firnow.com):http://dev.firnow.com/course/3_program/java/javashl/200845/108451.html
]]> 非R入式设计 和R入式设计 意思? http://www.aygfsteel.com/allrounder/articles/348547.html[ 王志?] [ 王志?] Tue, 19 Apr 2011 02:23:00 GMT http://www.aygfsteel.com/allrounder/articles/348547.html http://www.aygfsteel.com/allrounder/comments/348547.html http://www.aygfsteel.com/allrounder/articles/348547.html#Feedback 0 http://www.aygfsteel.com/allrounder/comments/commentRss/348547.html http://www.aygfsteel.com/allrounder/services/trackbacks/348547.html 非R入式pMlDI用语Q我得理解是两个lgQ类Q接口)之间Q比较独立,不深入到另一个类内部Q哪位大虾能Ҏ一二?
关于“侵入?#8221;?#8220;非R入式”设计
有读者讲“侵入?#8221;q一术语无法理解Q这里给一个简单解释,是我个h的看法?
在设计一个类Ӟ按理_需要考虑的应该只是该cL企图表示的那?#8220;概念”本nQؓ表示有关概念应记录哪些信息,该类的对象与外界交换信息的界面等{。但定义q个cdƈ不是Z攑֜那里观赏Q而是Z使用。在考虑cd象的使用Ӟ使用环境的一些要素就可能“侵入”q个cȝ设计之中。实际上Q许多情况下我们常常可以?#8220;侵入?#8221;设计?#8220;非R入式”设计之间做一个选择Q不同选择各有优缺炏V在考虑非类的程序部分时Q这U问题也同样存在?
例如Q我们可能需要对cA的对象做引用计数Q这里有两种基本可能性:计数功能纳入类A的设计内QR入式引用计数设计Q此时类A的对象中包含了与引用计数有关的要素,q显然是与类A所要表C的概念无关的东西)Q或者将计数功能攑֜cA之外Q非侵入式引用计敎ͼ?
本书中讨论容器时提出?#8220;侵入式容?#8221;设计?#8220;非R入式容器”设计的概念:当我们希望将cA的对象放入一U容器时Q是否需要将该容器的实现要素“侵入”cA的设计实C中(q显然是与类A本nq无必然关系的要素)。不同考虑D不同的容器设计?nbsp;
我基本上知道了,从夏大虾得著作中得知?
比如strutsQ需要承一些struts得类Q这是侵入式,使得pȝM开那个框架?
而spring中,业务cM需要承框架得c,来抛弃spring也比较方ѝ?
g大虾Q土豆块Q能否谈下ejb与spring之间得关pR你用ejb吗?如果用了Q感觉如何?
非R入式(non-intrusive)设计是目前非常热门的话题。在一般的讨论中,非R入式设计L和Springq样的IoC容器或者AOP技术联pd一赗但是从思想上说Qnon-intrusiveq不{h于IoC或者AOPQ它是一个比AOP更加宽泛的概c?br />
首先Q我们考察一下何谓intrusive。典型的intrusive实现是承特定的基类, 或者实现特定的接口. 在抽象的意义上说, intrusive意味着在基l构中预留了一些特D的,专用的结? q些l构对于基础功能而言不仅仅是无用? 甚至是有害的, 例如影响性能或者模p了原有的概늻? 而系l整体的后期扩展能力也受到这些预讄l构通道的限?
non-intrusive设计的基本特Ҏ量利用基础l构的元? 而不是引入额外的Ҏl构.例如, 在witrixq_的tpl模板?br />
Qbutton tpl:tag="ui:FlatButton" value="xx" onclick="alert('ok')" /Q?br />
如果后台tpl引擎不解析<ui:FlatButtonQ标{? 那么该标{表现是普通的html button. q里整个面的界面表现结构没有被tpl标签所破坏,而如果像jsp tag那样规定必须采用节点语法, ?br />
Qui:FlatButton value="xx" onclick="alert('ok')" /Q?br />
则在没有tpl引擎的情况下, 界面l构被tpl标签所破坏,此时在dreamweaverq样的可视化工具中我们无法再识别出有效的界面元素, 丧失了WYSIWYG~辑的能?
tpl:tag属性属于html语法本n规定了的自定义属? 它在html中的存在是符合规范的, 而且它对于button来说没有造成什么限制或损害, 因而是一U无害的标记. 在没有tpl模板引擎的情况下, tpl:tag属性与其他自定义属性一样处于同LC, 没有什么特D的作用. 而一旦tpl模板引擎识别Ҏ标记, 整个节点p解释成一个具有丰富表现Ş式的q面按钮而不是系l缺省风格的普通按? 从列设计的角度上说, button对应于ui:FlatButton在没有tpl解析能力情况旉化了的结? 在EJB3的规范中, 普通的POJO(Plain Old Java Object)对象在经q无害的标记(annotation)之后通过Enhanceq程获得持久化等Ҏ? POJO正对应于EJB Object的退化Ş? 在某U意义上我们可以? 存在着多少U可退化方式,对应着多少Unon-intrusive design?br />
与传l设计中的结构堆砌不? C技术更加强调在原有l构基础上的同态变? x原有l构中的某些部分出现Ҏ意义后所产生的对U破~? 在non-intrusive设计? 基础的结构中没有为扩展内|什么特D的l构, 一般仅仅是标记而已, q些标记是无害的甚至本n在基l构中是有用? 例如某些javascript库在前台html面中利用html标签的class属性作为标? Z识别q些属于l构标准部分的标记ƈ对之q行处理,我们需要一U可选择的结构透明? 具体来说我们需要能渗透到pȝ内部,准确的定位到标记? q就cM于x光检? x光只与某些特D材料发生强烈作用而普通部分对于x光而言是透明? 而当外部引擎识别些特D的标记之后, 可能需要操U该局部结? 例如在基l构中插入一些新的结构以实现基础l构的增? q些都可能需要应用类gAOP的技? 而在q一增强q程中关于扩展结构的具体知识存在于扩展引擎中而不是基l构? 因而往往整体表现ZUIoC的特?
转自Qhttp://hi.baidu.com/westsky/blog/item/46d452f0127cebaaa50f522f.html
]]>jquery 父窗?子窗?相关操作 http://www.aygfsteel.com/allrounder/articles/345878.html[ 王志?] [ 王志?] Mon, 07 Mar 2011 06:14:00 GMT http://www.aygfsteel.com/allrounder/articles/345878.html http://www.aygfsteel.com/allrounder/comments/345878.html http://www.aygfsteel.com/allrounder/articles/345878.html#Feedback 0 http://www.aygfsteel.com/allrounder/comments/commentRss/345878.html http://www.aygfsteel.com/allrounder/services/trackbacks/345878.html <1> js或者jQuery讉K面中的框架iframe.
注意:框架内的面是不能跨域的! 假设有两个页?在相同域?
假设Q父H口 index.html Q有 id ?subifrm ?iframe
1. 在index.html执行JS直接讉K子窗口中某元?:
document.getElementById( ' subifrm').contentWindow.document.getElementById('test').style.color='red'
2. 利用jquery 来访问子H口
$( " #subifrm " ).contents().find( " #test " ).css( ' color','red');
====================================================================
====================================================================
<2> 用DOMҎ与jqueryҎl合的方式实C动操?/strong>
1.在父H口中操?选中IFRAME中的所有单选钮
$(window.frames[ " iframe1 " ].document).find( " input[@type='radio'] " ).attr( " checked " , " true " );
2.在IFRAME中操?选中父窗口中的所有单选钮
$(window.parent.document).find( " input[@type='radio'] " ).attr( " checked " , " true " );
====================================================================
====================================================================
<3> 使用jquery操作iframe
1 面里有两个ifame
< iframe id = " leftiframe " ></ iframe >
< iframe id = " mainiframe></iframe>
< iframe id = " leftiframe " ></ iframe >
< iframe id = " mainiframe></iframe>
leftiframe中jQuery改变mainiframe的src代码Q?/p>
$( " #mainframe " ,parent.document.body).attr( " src " , " http://www.baidu.com " )
2?如果内容里面有一个ID为mainiframe的ifame
< iframe id = " mainifame " ></ ifame >
< iframe id = " mainifame " ></ ifame >
ifame包含一个someID
< div id = " someID " > you want to get this content </ div >
< div id = " someID " > you want to get this content </ div >
得到someID的内?/p>
$( " #mainiframe " ).contents().find( " someID " ).html();或?( " #mainiframe " ).contains().find( " someID " ).text();
$( " #mainiframe " ).contents().find( " someID " ).html();或?( " #mainiframe " ).contains().find( " someID " ).text();
$( " #mainiframe " ).contents().find( " someID " ).html();或?( " #mainiframe " ).contains().find( " someID " ).text();
2 、如上面所C?
leftiframe中的jQuery操作mainiframe的内容someID的内?/p>
$( " #mainframe " ,parent.document.body).contents().find( " someID " ).html();或?nbsp;$( " #mainframe " ,parent.document.body).contents().find( " someID " ).val();
source:http://suan2046.javaeye.com/blog/575421
]]>
վ֩ģ壺
ӯ |
Ұ |
|
|
|
ӻ |
Ƽ |
Ҫ |
|
|
|
ľ |
|
|
ʯ |
Ƽ |
|
|
ʡ |
|
ˮ |
ͨ |
е |
Ϫ |
̳ |
ͤ |
|
̫ |
|
|
ɽ |
Ϳ |
|
|
ϸ |
ȫ |
Ӫ |
|
Ʊ |
ɽ |
ֹ |