<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://sqlserver.ro/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Intrebari generale</title><link>http://sqlserver.ro/forums/16/ShowForum.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>Re: optimizare TSQL</title><link>http://sqlserver.ro/forums/thread/7527.aspx</link><pubDate>Wed, 26 Aug 2009 12:16:57 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:7527</guid><dc:creator>B_gd_n[ ]Sahlean</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/7527.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=16&amp;PostID=7527</wfw:commentRss><description>1. &lt;u&gt;&lt;b&gt;Încearcă să identifici cauzele&lt;/b&gt;&lt;/u&gt; pentru care timpul de execuţie este mare. Foloseşte &lt;a href="http://msdn.microsoft.com/en-us/library/ms184361.aspx"&gt;SET STATISTICS IO&lt;/a&gt; pentru a identifica (pentru început) comenzile SQL generatoare de operaţii IO fizice *&lt;span&gt;&lt;strong&gt;physical reads&lt;/strong&gt;&lt;/span&gt;. Ulterior, analizeză planul de execuţie pentru a identifica operatorii SQL care&amp;nbsp; sunt &lt;i&gt;problematici&lt;/i&gt;(de cele mai multei ori): table scan, clustered index scan, hash join ...&lt;br&gt;&lt;br&gt;2. &lt;b&gt;&lt;i&gt;Scapă&lt;/i&gt;&lt;/b&gt; de cursor&lt;br&gt;&lt;br&gt;3. Rescrie scriptul. O sugestie:&lt;br&gt;&lt;span style="color:Black;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;SELECT&lt;/span&gt; &lt;span style="color:Fuchsia;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;max&lt;/span&gt;(c)&lt;br&gt;&lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;FROM&lt;/span&gt; (&lt;br&gt;    &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;SELECT&lt;/span&gt; dt &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;AS&lt;/span&gt; c, c1&lt;br&gt;    &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;FROM&lt;/span&gt; history&lt;br&gt;    &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;UNION&lt;/span&gt; &lt;span style="color:Silver;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;ALL&lt;/span&gt;&lt;br&gt;    &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;SELECT&lt;/span&gt; lpd &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;AS&lt;/span&gt; c, c1&lt;br&gt;    &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;FROM&lt;/span&gt; history&lt;br&gt;) u&lt;br&gt;&lt;br&gt;&lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;SELECT&lt;/span&gt; &lt;span style="color:Fuchsia;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;MAX&lt;/span&gt;(&lt;span style="color:Fuchsia;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;CASE&lt;/span&gt; &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;WHEN&lt;/span&gt; dt &amp;lt; lpd &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;THEN&lt;/span&gt; lpd &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;ELSE&lt;/span&gt; dt &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;END&lt;/span&gt;)&lt;br&gt;&lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;FROM&lt;/span&gt; history&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</description></item><item><title>optimizare TSQL</title><link>http://sqlserver.ro/forums/thread/7526.aspx</link><pubDate>Wed, 26 Aug 2009 10:16:55 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:7526</guid><dc:creator>noface</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/7526.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=16&amp;PostID=7526</wfw:commentRss><description>se da urmatorul cod:&lt;br /&gt;&lt;br /&gt;SET @s = CURSOR FOR&lt;br /&gt;            select r1,u1,ois,n1,n2,c1,c2,m1,&lt;br /&gt;            life from TempStd &lt;br /&gt;OPEN @s&lt;br /&gt;FETCH NEXT&lt;br /&gt;FROM @s INTO @r1 ,@u1 ,@OIS ,&lt;br /&gt;        @n1 ,@n2 , @c1 ,@c2 ,&lt;br /&gt;        @m1 ,@Life &lt;br /&gt;WHILE @@FETCH_STATUS = 0&lt;br /&gt;BEGIN&lt;br /&gt;if @Life='New'&lt;br /&gt;.................&lt;br /&gt;end&lt;br /&gt;else if @Life='Old'&lt;br /&gt;begin&lt;br /&gt;&lt;br /&gt;insert into Table2 (n1,c1,c2,lpd,lvd,cno,lmb,&lt;br /&gt;            lmd)&lt;br /&gt;&lt;br /&gt;            &lt;br /&gt;&lt;br /&gt;SELECT    n1,c1,c2,&lt;br /&gt;( &lt;br /&gt;SELECT max(c) &lt;br /&gt;FROM (    &lt;br /&gt;SELECT dt AS c, c1 &lt;br /&gt;FROM history &lt;br /&gt;UNION ALL &lt;br /&gt;SELECT lpd AS c, c1 &lt;br /&gt;FROM history &lt;br /&gt;) u &lt;br /&gt;WHERE h.c1 = u.c1 &lt;br /&gt;)as lpd,&lt;br /&gt;( &lt;br /&gt;SELECT max(c) &lt;br /&gt;FROM (    &lt;br /&gt;SELECT dv AS c, c1 &lt;br /&gt;FROM history &lt;br /&gt;UNION ALL &lt;br /&gt;SELECT lvd AS c, c1 &lt;br /&gt;FROM history &lt;br /&gt;) u&lt;br /&gt;WHERE h.c1 = u.c1 &lt;br /&gt;)as lvd,  &lt;br /&gt;max(cno)+1 as MaxC, lmb, lmd &lt;br /&gt;FROM history h &lt;br /&gt;WHERE c1=@c1 and cno in (select max(cno) from history where c1=@c1)&lt;br /&gt;GROUP BY n1, lmb, lmd,c1,c2,&lt;br /&gt;dt,dv&lt;br /&gt;&lt;br /&gt;            &lt;br /&gt;end&lt;br /&gt;..................&lt;br /&gt;DEALLOCATE @s&lt;br /&gt;&lt;br /&gt;problema este ca pt ca pt aprox 40.000 de inregistrari in tabela history si cu aprox 18.000 de inreg in tabela TempStd, toata procedura ruleaza cam in 30 de minute, ceea ce e departe de a fi ok.&lt;br /&gt;m-ar interesa idei asupra posibilitatii de optimizare, altfel cand va creste numarul de inregistrari in history la cateva sute de mii, s-ar putea sa stau mult si bine &lt;br /&gt;&lt;br /&gt;Multumesc&lt;br /&gt;</description></item></channel></rss>