<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Datubāzu resurss latviski</title>
	<atom:link href="http://datubazes.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://datubazes.wordpress.com</link>
	<description></description>
	<lastBuildDate>Mon, 20 Apr 2009 13:35:39 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>lv</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<image>
		<url>http://www.gravatar.com/blavatar/0f58e3d683934a8d6a50baa7d93f99a5?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Datubāzu resurss latviski</title>
		<link>http://datubazes.wordpress.com</link>
	</image>
			<item>
		<title>Oracle + Sun (arī MySQL)</title>
		<link>http://datubazes.wordpress.com/2009/04/20/oracle-sun-ari-mysql/</link>
		<comments>http://datubazes.wordpress.com/2009/04/20/oracle-sun-ari-mysql/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 13:35:39 +0000</pubDate>
		<dc:creator>Gints Plivna</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://datubazes.wordpress.com/?p=1027</guid>
		<description><![CDATA[Viss plūst viss mainās, MySQL te bija pats savs MySQL, te Sun MySQL, tagad jau Oracle&#8217;s MySQL  
Oracle savai 11 dažādu DBVS kolekcijai varēs pievienot vēl vienu. OK nezinu kā tur ir ar visādām licencēm/autortiesībām, bet katrā ziņā nākotne izskatās interesanti.
Tā kā Oracle dzimtā DBVS jau ir kļuvusi pārāk sakārtota un tuvu pilnībai un [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=datubazes.wordpress.com&blog=1883718&post=1027&subd=datubazes&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Viss plūst viss mainās, MySQL te bija pats savs MySQL, te Sun MySQL, tagad jau Oracle&#8217;s MySQL <img src='http://s.wordpress.com/wp-includes/images/smilies/face-smile.png' alt=':)' class='wp-smiley' /> <br />
Oracle savai <a href="http://datubazes.wordpress.com/2007/11/16/db-saraksts/#comment-51">11 dažādu DBVS kolekcijai</a> varēs pievienot vēl vienu. OK nezinu kā tur ir ar visādām licencēm/autortiesībām, bet katrā ziņā nākotne izskatās interesanti.</p>
<p>Tā kā <a href="http://datubazes.wordpress.com/oracle/" target="_self">Oracle dzimtā DBVS</a> jau ir kļuvusi pārāk sakārtota un tuvu pilnībai un kā mēs zinām, tad viss, kas kļūst pilnīgs, bankrotē un tiek aizvietots ar kaut ko haotiskāku un mazāk sakārtotu, tad var izrādīties, ka vismaz lielākais haoss būs jāmeklē tajā pašā kompānijā <img src='http://s.wordpress.com/wp-includes/images/smilies/face-smile.png' alt=':)' class='wp-smiley' /> </p>
<p>Darījums, protams, vēl procesā, cena 7,4 miljardi, sīkākas detaļas skat. <a href="http://www.bloomberg.com/apps/news?pid=20601087&amp;sid=a38_8MJNSjR4&amp;refer=home" target="_blank">Bloomberg.com</a> lapā un arī pašas <a href="http://www.oracle.com/sun/index.html" target="_blank">Oracle interpretācijā</a>. Sapnis par Oracle spēju nodrošināt visu sākot ar dzelžiem, operētājsistēmu, līdz DBVS un gatavām aplikācijām kļūst aizvien tuvāks&#8230;</p>
Posted in MySQL, Oracle  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/datubazes.wordpress.com/1027/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/datubazes.wordpress.com/1027/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/datubazes.wordpress.com/1027/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/datubazes.wordpress.com/1027/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/datubazes.wordpress.com/1027/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/datubazes.wordpress.com/1027/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/datubazes.wordpress.com/1027/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/datubazes.wordpress.com/1027/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/datubazes.wordpress.com/1027/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/datubazes.wordpress.com/1027/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=datubazes.wordpress.com&blog=1883718&post=1027&subd=datubazes&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://datubazes.wordpress.com/2009/04/20/oracle-sun-ari-mysql/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Gints</media:title>
		</media:content>
	</item>
		<item>
		<title>SQL teikuma izpildes plāna iegūšana &#8211; Oracle, MySQL, SQL Server</title>
		<link>http://datubazes.wordpress.com/2009/04/07/sql-teikuma-izpildes-plana-iegusana-oracle-mysql-sql-server/</link>
		<comments>http://datubazes.wordpress.com/2009/04/07/sql-teikuma-izpildes-plana-iegusana-oracle-mysql-sql-server/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 06:20:56 +0000</pubDate>
		<dc:creator>Gints Plivna</dc:creator>
				<category><![CDATA[MS SQL Server]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://datubazes.wordpress.com/?p=645</guid>
		<description><![CDATA[SQL teikumu izpildes plāns (query execution plan) &#8211; kurš gan nopietni interesējoties par datubāzu izstrādi tādu terminu nav dzirdējis? Vaicājums lēni strādā &#8211; paskaties izpildes plānu! Tiesa gan vairumā gadījumu tiek pašas par sevi pieņemtas divas (varbūt pat trīs) lietas:

persona zin, kā izpildes plānu dabūt;
persona zin, ko iegūtais izpildes plāns nozīmē;
persona zin, kā panākt, lai [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=datubazes.wordpress.com&blog=1883718&post=645&subd=datubazes&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>SQL teikumu izpildes plāns (<em>query execution plan</em>) &#8211; kurš gan nopietni interesējoties par datubāzu izstrādi tādu terminu nav dzirdējis? Vaicājums lēni strādā &#8211; paskaties izpildes plānu! Tiesa gan vairumā gadījumu tiek pašas par sevi pieņemtas divas (varbūt pat trīs) lietas:</p>
<ul>
<li>persona zin, kā izpildes plānu dabūt;</li>
<li>persona zin, ko iegūtais izpildes plāns nozīmē;</li>
<li><em>persona zin, kā panākt, lai izpildes plāns būtu optimālāks nekā iegūtais vai arī saprot, ka nekas labāks nevar sanākt (neobligātais solis).</em></li>
</ul>
<p>Šai rakstā apspriedīšu pirmo soli jau parasti izvēlētajām DBVS &#8211; <a href="#h1" target="_self">Oracle</a>, <a href="#h2" target="_self">MySQL</a>, <a href="#h3" target="_self">SQL Server</a>. Kā jau Jūs noteikti zinat <a href="http://datubazes.wordpress.com/2007/11/21/ka-izveleties-datubazi/" target="_self">visas DBVS ir atšķirīgas</a>, attiecīgi atšķirīgas ir arī metodes, <em>kā izpildes plānu iegūt</em>. Tātad pēc kārtas.</p>
<p><a id="101" title="h1" name="h1"></a></p>
<h3>Oracle</h3>
<p>Oraclē ir vairākas metodes, kā iegūt SQL teikuma izpildes plānu, ar dažādu sarežģītību un ticamības pakāpi. Ja izmantojat rīku <a href="http://datubazes.wordpress.com/2007/11/06/nedaudz-par-sqlplus/" target="_self">SQL*Plus</a>, tad visvienkāršāk ir izmantot šī rīka komandu <a href="http://datubazes.wordpress.com/2008/01/30/sqlplus-autotrace/" target="_self">autotrace</a>. Es šeit gari nekāvēšos pie šī rīka un komandas apraksta, jo tie abi ir augšminētajās saitēs, šeit tikai īss piemērs. Visiem turpmākajiem piemēriem tiks izmantotas <a href="http://datubazes.wordpress.com/2008/02/19/cross-join/#p0" target="_self">tabulas no raksta par Dekarta reizinājumu</a>.<span id="more-645"></span><br />
<a id="1" title="p1" name="p1"></a></p>
<h6>Piemērs 1. Izpildes plāna iegūšana izmantojot autotrace.</h6>
<pre>SQL&gt; set autot traceonly explain
SQL&gt; SELECT prs_personas_kods, prs_vards, adr_pilseta
  2  FROM personas
  3  INNER JOIN adreses ON prs_adr_id = adr_id
  4  /
Execution Plan
----------------------------------------------------------
Plan hash value: 4160699136
----------------------------------------------------------------
|Id|Operation          |Name    |Rows|Bytes|Cost(%CPU)|Time    |
----------------------------------------------------------------
| 0|SELECT STATEMENT   |        |  3 | 231 |   7  (15)|00:00:01|
|*1| HASH JOIN         |        |  3 | 231 |   7  (15)|00:00:01|
| 2|  TABLE ACCESS FULL|ADRESES |  3 | 105 |   3   (0)|00:00:01|
| 3|  TABLE ACCESS FULL|PERSONAS|  4 | 168 |   3   (0)|00:00:01|
----------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - access("PRS_ADR_ID"="ADR_ID")
Note
-----
   - dynamic sampling used for this statement</pre>
<p>Jāatgādina, ka autotrace mēdz melot &#8211; izpildes plāns ir tas ko Oracle domā, ka izpildīs zinot pašreizējo informāciju, aktuālajā izpildē situācija noteiktos apstākļos var mainīties. Tiesa gan <em>meli</em> ir relatīvi reti, bet ir.</p>
<p>Nākošā metode, kas ir sākot no 9 versijas, bet kopš 10 versijas tā jau ir vienkārši <em>nenormāli ērta</em>, ir izmantot pakotni <a href="http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28419/d_xplan.htm" target="_blank">dbms_xplan</a>. Tātad, lai iegūtu izpildes plānu tabulā plan_table (noklusētā tabula), mēs varam izmantot komandu EXPLAIN PLAN, kas rezultātu ieraksta jau augšminētajā tabulā un tad no tās iegūt formatētā veidā izmantojot pakotnes dbms_xplan funkciju display. Arī šis veids mēdz melot, jo pēc būtības autotrace dara to pašu tikai klusiņām fonā.<br />
<a id="2" title="p2" name="p2"></a></p>
<h6>Piemērs 2. Izpildes plāna saglabāšana tabulā plan_table un iegūšana no tās izmantojot dbms_xplan. Šis strādā jau no 9 versijas.</h6>
<pre>SQL&gt; set autot off
SQL&gt; EXPLAIN PLAN FOR
  2  SELECT prs_personas_kods, prs_vards, adr_pilseta
  3  FROM personas
  4  INNER JOIN adreses ON prs_adr_id = adr_id
  5  /
Explained.
SQL&gt; SELECT * FROM table(DBMS_XPLAN.DISPLAY);
PLAN_TABLE_OUTPUT
----------------------------------------------------------------
Plan hash value: 4160699136
----------------------------------------------------------------
|Id|Operation          |Name    |Rows|Bytes|Cost(%CPU)|Time    |
----------------------------------------------------------------
| 0|SELECT STATEMENT   |        |  3 | 231 |   7  (15)|00:00:01|
|*1| HASH JOIN         |        |  3 | 231 |   7  (15)|00:00:01|
| 2|  TABLE ACCESS FULL|ADRESES |  3 | 105 |   3   (0)|00:00:01|
| 3|  TABLE ACCESS FULL|PERSONAS|  4 | 168 |   3   (0)|00:00:01|
----------------------------------------------------------------

PLAN_TABLE_OUTPUT
----------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - access("PRS_ADR_ID"="ADR_ID")
Note
-----
   - dynamic sampling used for this statement</pre>
<p>Tad tagad par to <em>nenormāli ērto</em> piegājienu, lai iegūtu patieso izpildes plānu un piedevām vēl gan sagaidīto kardinalitāti, gan patieso &#8211; to, kas tika iegūta izpildes laikā. Un tātad jāizmanto dbms_xplan.display_cursor. Ar piemērā redzamajiem parametriem izpildes plāns tiek paņemts pēdējam izpildītajam SQL teikuma no <a href="http://datubazes.wordpress.com/2008/12/04/oracle-datu-vardnica/#h5" target="_self">datu vārdnīcas dinamiskajiem (v$) skatījumiem</a>. SQL teikumā pierakstot hintu gather_plan_statistics, iegūstam arī patieso izpildes laika kardinalitāti un izpildes laiku katram plāna solim.<br />
<a id="3" title="p3" name="p3"></a></p>
<h6>Piemērs 3. Pēdējā izpildītā SQL teikuma izpildes plāna iegūšana no sistēmas dinamiskajiem skatījumiem.</h6>
<pre>SQL&gt; set pages 50000
SQL&gt; set serveroutput off
SQL&gt; SELECT /*+ gather_plan_statistics */
  2  prs_personas_kods, prs_vards, adr_pilseta
  3  FROM personas
  4  INNER JOIN adreses ON prs_adr_id = adr_id;
PRS_PERSONA PRS_VARDS      ADR_PILSETA
----------- -------------- ------------
23456789012 PĒTERIS        TALSI
34567890123 ANNA           TALSI
45678901234 KĀRLIS         TALSI
SQL&gt; select * from
  2  table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));
PLAN_TABLE_OUTPUT
--------------------------------------------
SQL_ID  6u4ahhavg90cy, child number 0
-------------------------------------
SELECT /*+ gather_plan_statistics */
prs_personas_kods, prs_vards, adr_pilseta
FROM personas INNER JOIN
adreses ON prs_adr_id = adr_id
Plan hash value: 4160699136
----------------------------------------------------------
|Id|Operation         |Name    |E-Rows|A-Rows|   A-Time  |
----------------------------------------------------------
|*1|HASH JOIN         |        |    3 |    3 |00:00:00.01|
| 2| TABLE ACCESS FULL|ADRESES |    3 |    3 |00:00:00.01|
| 3| TABLE ACCESS FULL|PERSONAS|    4 |    4 |00:00:00.01|
----------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - access("PRS_ADR_ID"="ADR_ID")
Note
-----
   - dynamic sampling used for this statement
 </pre>
<p>Augšminētajā  piemērā es esmu izvācis ārā dažas kolonas, jo tās diemžēl bojā izskatu visai vietnei <img src='http://s.wordpress.com/wp-includes/images/smilies/face-smile.png' alt=':)' class='wp-smiley' /> , bet interesantākās esmu atstājis &#8211; E-Rows ir paredzētais ierakstu skaits (<em>estimated rows</em>), bet A-Rows ir aktuālāis ierakstu skaits (<em>actual rows</em>). A-Time savukārt ir laiks, cik paterēts katram solim. Kā redzam šai gadījumā plānotais un reālais ierakstu skaits sakrīt, bet laiks ir 0.01 sekunde (tā kā norādītajam laikam ir noapaļošanas kļūdas, tad uz tik maziem lielumiem precizitāte, protams, klibo).</p>
<p>Vēl divas iespējas, lai iegūtu  reālos izpildes plānus citām sesijām un/vai vairākiem SQL teikumiem, ir izmantot vai nu to pašu dbms_xplan.display_cursor noskaidrojot sql_id vērtību, piemēram, no v$sql, vai arī palaist <a href="http://www.gplivna.eu/papers/otrace.htm" target="_blank">trasēšanu (<em>trace</em>)</a>, kas ģenerē trasēšanas datni uz servera, kurā var iegūt arī visus precīzos izpildes plānus u.c. informāciju.</p>
<p>Protams, ja izmantojat kādu no vizuālajiem rīkiem, tad lielākajā daļā no tiem ir iebūvēta plāna izpildes apskate. PL/SQL Developer tas tiek ņemts no plan_table (attiecīgi nav pilnīgas drošības par tā patiesumu) un izskatās šādi:<br />
<a id="4" title="p4" name="p4"></a></p>
<h6>Piemērs 4. Vizuāls SQL teikuma izpildes plāns rīkā PL/SQL Developer.</h6>
<p><img class="alignnone size-full wp-image-744" title="PL/SQL Developer izpildes plāns" src="http://datubazes.files.wordpress.com/2009/01/plsql_developer_izpildes_plans.jpg?w=460&#038;h=227" alt="PL/SQL Developer izpildes plāns" width="460" height="227" /></p>
<p>Savukārt, ja gadās izmantot Enterprise Manager konsoli, tad tas ir reālais izpildes plāns un izskatās šādi:<br />
<a id="5" title="p5" name="p5"></a></p>
<h6>Piemērs 5. Vizuāls SQL teikuma izpildes plāns Enterprise Manager Console.</h6>
<p><img class="alignnone size-full wp-image-746" title="Oracle Enterprise Manger Console izpildes plāns" src="http://datubazes.files.wordpress.com/2009/01/em_console_izpildes_plans.jpg?w=460&#038;h=385" alt="Oracle Enterprise Manger Console izpildes plāns" width="460" height="385" /></p>
<p><a id="102" title="h2" name="h2"></a></p>
<h3>MySQL</h3>
<p>MySQLā ir komanda EXPLAIN, ko vienkārši piekabina sākumā <a href="http://datubazes.wordpress.com/2007/12/28/sql-select-i/" target="_self">SQL Select teikumam</a> un iegūst izpildes plānu.<br />
<a id="6" title="p6" name="p6"></a></p>
<h6>Piemērs 6. Izpildes plāna iegūšana MySQLā.</h6>
<pre>mysql&gt; EXPLAIN
    -&gt; SELECT prs_personas_kods, prs_vards, adr_pilseta
    -&gt; FROM personas
    -&gt; INNER JOIN adreses ON prs_adr_id = adr_id;
+--+-----------+--------+------+-------------+-------+-------+----+
|id|select_type|table   |type  |possible_keys|key    |key_len|rows|
+--+-----------+--------+------+-------------+-------+-------+----+
| 1|SIMPLE     |personas|ALL   |NULL         |NULL   |NULL   |   1|
| 1|SIMPLE     |adreses |eq_ref|PRIMARY      |PRIMARY|4      |   1|
+--+-----------+--------+------+-------------+-------+-------+----+
2 rows in set (0.00 sec)</pre>
<p>Ja nu gadījumā  jums šāds izskats nepatīk, tad varat mēģināt izmantot <a href="http://www.maatkit.org/" target="_blank">rīku Maatkit</a>, kas sola izpildes plānu vizualizēt koka formā, tiesa gan pats neesmu lietojis.</p>
<p>Līdzīgi kā Oraclei arī šeit EXPLAIN komanda var melot un tai ir arī citi šādi tādi mīnusi, kā <a href="http://www.mysqlperformanceblog.com/2006/07/24/mysql-explain-limits-and-errors/" target="_blank">rakstīts šai MySQL Performance Blog rakstā</a>, tiesa gan izskatās, ka MySQL nav citu alternatīvu veidu, kā 100% droši iegūt faktisko izpildes plānu.</p>
<p><a id="103" title="h3" name="h3"></a></p>
<h3>SQL Server </h3>
<p>SQL Server kā zināms izceļas ar savu &#8220;pogaino&#8221; interfeisu un tur iegūt izpildes plānu var ļoti vienkārši piespiežot pareizo podziņu <img src='http://s.wordpress.com/wp-includes/images/smilies/face-smile.png' alt=':)' class='wp-smiley' />  SQL Server Mangement Studio ir divas pogas 1) parādīt paredzamo izpildes plānu (<em>Display Estimated Execution Plan</em>) un 2) parādīt reālo izpildes plānu (<em>Display Actual Execution Plan</em>). Pirmā podziņa speciāli uzģenerē plānu, kas izskatās šādi.<br />
<a id="7" title="p7" name="p7"></a></p>
<h6>Piemērs 7. Vizuāls paredzamais SQL teikuma izpildes plāns SQL Serverī.</h6>
<p><img class="alignnone size-full wp-image-737" title="SQL Server paredzamais izpildes plāns" src="http://datubazes.files.wordpress.com/2009/01/paredzamais_izpildes_plans.jpg?w=460&#038;h=385" alt="SQL Server paredzamais izpildes plāns" width="460" height="385" /></p>
<p>Lai dabūtu reālo izpildes plānu, ir jānospiež podziņa mazliet pa labi un pēc SQL teikums jāizpilda, normālā gadījumā tas jau neatšķiras no paredzamā, tikai ar kursoru uzbraucot uz operācijas var iegūt papildus ziņas (piemēram, reālais ierakstu skaits <em>Actual Number of Rows</em>).<br />
<a id="8" title="p8" name="p8"></a></p>
<h6>Piemērs 8. Vizuāls reālais SQL teikuma izpildes plāns SQL Serverī.</h6>
<p><img class="alignnone size-full wp-image-742" title="SQL Server reālais izpildes plāns" src="http://datubazes.files.wordpress.com/2009/01/realais_izpildes_plans1.jpg?w=460&#038;h=580" alt="SQL Server reālais izpildes plāns" width="460" height="580" /></p>
<p>Izmantojot šādus SET teikumus, augstāk redzamās bildītes &#8211; izpildes plānus &#8211; var iegūt arī teksta formā:</p>
<ul>
<li>SET SHOWPLAN_ALL { ON | OFF } &#8211; attēlo paredzamo izpildes plānu.</li>
<li>SET STATISTICS PROFILE { ON | OFF } &#8211; attēlo reālo izpildes plānu un reālo ierakstu skaitu katrā solī.</li>
</ul>
<p>Ilustrācijai piemērs ar SET SHOWPLAN_ALL ON:<br />
<a id="9" title="p9" name="p9"></a></p>
<h6>Piemērs 9. Paredzamais SQL teikuma izpildes plāns SQL Serverī.</h6>
<pre>StmtText                                                          
------------------------------------------------------------------
SELECT prs_personas_kods, prs_vards, adr_pilseta
FROM personas
INNER JOIN adreses ON prs_adr_id = adr_id                         
|-Nested Loops(Inner Join, OUTER REFERENCES:(personas.prs_adr_id))
  |-Clustered Index Scan(OBJECT:(personas.PK__personas__4374BBA0))
  |-Clustered Index Seek(OBJECT:(adreses.PK__adreses__418C732E),..</pre>
<p>Uzrakstot SET STATISTICS PROFILE ON, iegūst sql teikuma izpildes rezultātu, to pašu, ko iepriekšējā piemērā un vēl kolonas Rows un Executes, kas norāda cik ieraksti atgriezti un cik reizes operācija izpildīta:<br />
<a id="10" title="p10" name="p10"></a></p>
<h6>Piemērs 10. Reālais SQL teikuma izpildes plāns SQL Serverī.</h6>
<pre>Rows Executes StmtText                                       
---- -------- ------------------------------------------------
3    1        SELECT prs_personas_kods, prs_vards, adr_pilseta
              FROM personas
              INNER JOIN adreses ON prs_adr_id = adr_id
3    1        |--Nested Loops(Inner Join, OUTER REFERENCES
4    1          |--Clustered Index Scan(OBJECT...
3    4          |--Clustered Index Seek(OBJECT...</pre>
<p><a id="103" title="h3" name="h3"></a></p>
<h3>Tālākā lasāmviela</h3>
<ul>
<li>Šis raksts jau bija gandrīz pabeigts pirms es ķēros pie savas <a href="http://datubazes.files.wordpress.com/2009/03/oracle-sql-teikuma-izpildes-plans-execution-plan.pdf" target="_blank">Oracle prezentācijas par SQL teikuma izpildes plānu</a>. Tajā neapšaubāmi ir vairāk informācijas kā šeit, bet, protams, bez īpašiem paskaidrojumiem;</li>
<li><a href="http://jonathanlewis.wordpress.com/2006/11/09/dbms_xplan-in-10g/" target="_blank">dbms_xplan 10g versijā</a> &#8211; Jonathan Lewis raksts par dbms_xplan.</li>
</ul>
Posted in MS SQL Server, MySQL, Oracle, SQL  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/datubazes.wordpress.com/645/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/datubazes.wordpress.com/645/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/datubazes.wordpress.com/645/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/datubazes.wordpress.com/645/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/datubazes.wordpress.com/645/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/datubazes.wordpress.com/645/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/datubazes.wordpress.com/645/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/datubazes.wordpress.com/645/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/datubazes.wordpress.com/645/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/datubazes.wordpress.com/645/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=datubazes.wordpress.com&blog=1883718&post=645&subd=datubazes&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://datubazes.wordpress.com/2009/04/07/sql-teikuma-izpildes-plana-iegusana-oracle-mysql-sql-server/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Gints</media:title>
		</media:content>

		<media:content url="http://datubazes.files.wordpress.com/2009/01/plsql_developer_izpildes_plans.jpg" medium="image">
			<media:title type="html">PL/SQL Developer izpildes plāns</media:title>
		</media:content>

		<media:content url="http://datubazes.files.wordpress.com/2009/01/em_console_izpildes_plans.jpg" medium="image">
			<media:title type="html">Oracle Enterprise Manger Console izpildes plāns</media:title>
		</media:content>

		<media:content url="http://datubazes.files.wordpress.com/2009/01/paredzamais_izpildes_plans.jpg" medium="image">
			<media:title type="html">SQL Server paredzamais izpildes plāns</media:title>
		</media:content>

		<media:content url="http://datubazes.files.wordpress.com/2009/01/realais_izpildes_plans1.jpg" medium="image">
			<media:title type="html">SQL Server reālais izpildes plāns</media:title>
		</media:content>
	</item>
		<item>
		<title>Paradigmas maiņa &#8211; SQL ātrdarbības atslēga</title>
		<link>http://datubazes.wordpress.com/2009/04/03/paradigmas-maina-sql-atrdarbiba/</link>
		<comments>http://datubazes.wordpress.com/2009/04/03/paradigmas-maina-sql-atrdarbiba/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 06:00:38 +0000</pubDate>
		<dc:creator>Gints Plivna</dc:creator>
				<category><![CDATA[Ātrdarbība]]></category>

		<guid isPermaLink="false">http://datubazes.wordpress.com/?p=962</guid>
		<description><![CDATA[Strādājot ar lielākiem datu apjomiem, datubāzēs parasti rodas problēmas ar ātrdarbību. Viens no izplatītiem iemesliem (par ko es rakstīju arī savās 7 lietās, ko nevajag darīt) ir datu uztveršana un darbības ar tiem pa ierakstiem un nevis kopām. Protams, ne es pirmais, ne pēdējais, kas izrunā šo maģisko vārdu savienojumu &#8220;apstrādāt datus datubāzē KĀ KOPAS&#8220;, tikai, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=datubazes.wordpress.com&blog=1883718&post=962&subd=datubazes&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Strādājot ar lielākiem datu apjomiem, datubāzēs parasti rodas problēmas ar ātrdarbību. Viens no izplatītiem iemesliem (par ko es rakstīju arī savās <a href="http://datubazes.wordpress.com/2009/01/23/7-lietas-ko-nevajag-darit/" target="_self">7 lietās, ko nevajag darīt</a>) ir datu uztveršana un darbības ar tiem pa ierakstiem un nevis kopām. Protams, ne es pirmais, ne pēdējais, kas izrunā šo maģisko vārdu savienojumu &#8220;<strong>apstrādāt datus datubāzē KĀ KOPAS</strong>&#8220;, tikai, <a href="http://datubazes.wordpress.com/2009/01/23/7-lietas-ko-nevajag-darit/#comment-484" target="_self">skatoties uz komentāru pie šī paša raksta</a>, acīmredzot ir problēmas saprast, ko tas īsti nozīmē. Tad nu mēģināšu paskaidrot sīkāk, <em>ko nozīmē datus uztvert kā kopas</em> un <em>ar ko tas atšķiras no tradicionālās programmēšanas pieejas</em>. Tā lūk ir <a href="http://en.wikipedia.org/wiki/Paradigm_shift" target="_blank">paradigmas maiņa</a> no viena veida datu uztveres uz citu.</p>
<h3>Tradicionālā programmēšanas pieeja</h3>
<p>Tradicionālajā programmēšanā darbība vienlaicīgi notiek ar vienu ierakstu. Tas var būt vienkāršs ar vienu vienkāršu lauku, piemēram, skaitlis 17, tas var būt sarežģītāks, piemēram, adreses objekts, kurš sastāv no 10 sīkākiem laukiem, bet objekts parasti ir viens. Un tas viens arī tiek vienlaicīgi apstrādāts. Dabiski, ka programmētājam, sākot darboties ar datubāzēm, šāda pieeja tiek pārnesta arī tur. Programmētājs, rakstot pieprasījumus datubāzei (gan datu atlases, gan mainīšanas), vienlaicīgi &#8220;redz&#8221; tikai vienu ierakstu. Tas var būt sarežģītāks, mazāk sarežģīts, bet tikai vienu. Šāda pieeja nerada nekādas vai rada relatīvi mazas problēmas tradicionālu ievades/rediģēšanas formu gadījumā, jo tajās lietotāji arī parasti strādā ar vienu vai dažiem ierakstiem un parasta programmētāja pieeja &#8220;redzot&#8221; tikai vienu ierakstu neko daudz neskādē, vai pat bieži nekāda cita pieeja vispār nav izmantojama. Taču problēmas rodas lielāku datu kopu apstrādē. Un tad ir jāveic izmaiņas domāšanā un jāpāriet uz..</p>
<h3>Datu kopu pieeja</h3>
<p>Šī pieeja ir svarīga un vislielākos ieguvumus dod, ja tiek apstrādāts relatīvi liels ierakstu skaits. Daži piemēri:</p>
<ul>
<li>Atskaišu izveide;</li>
<li>Vienreizēja datu migrācija no vecās sistēmas uz jauno;</li>
<li>Regulāra datu pārnešana/sinhronizācija no vienas sistēmas uz otru;</li>
<li>Regulāra specifiska lielu apjoma datu apstrādes (dienas rezultātu apstrāde, noteiktā laika periodā ievadīto datu kvalitātes pārbaude) utt.</li>
</ul>
<p>Izmantojot tradicionālo viena ieraksta pieeju, rezultāta ieguve ir aptuveni šāda:</p>
<pre>Ciklā pa nepieciešamajiem ierakstiem atskaitei vai apstrādei
  Veicam katram ierakstam nepieciešamās darbības
    (kolonu aprēķini, kvalitātes pārbaudes utml)
  Papildinam gala summu vai saglabājam rezultātu datubāzē</pre>
<p>Ko tas nozīmē <em>no ātrdarbības viedokļa</em>? <strong>Rezultāta ieguve ir tieši proporcionāla apstrādājamo datu apjomam</strong>. Ja katra ieraksta apstrāde mums prasa nieka 0,1 sekundi, tad pie ierakstu skaita 1 miljons (kas nav nekas īpašs) rezultāta ieguve prasīs 1 000 000 * 0,1 sekundes ≈ 1667 minūtes ≈ 28 stundas. Tātad, ja reizi diennaktī Jūs saņemat šādu datu apjomu, tad diemžēl ir liela problēma, jo datu apstrāde aizņem vairāk nekā diennakti. Pat, ja šāds datu apjoms ir reizi nedēļā, patērētais laiks nav īpaši iepriecinošs. Un ko darīt, ja datu apjoms var tikai pieaugt? Tādā gadījumā ir jāveic principiālas izmaiņas un jāpāriet no domas ierakstu pa ierakstiem uz domu par visiem ierakstiem reizē, un tātad:</p>
<ul>
<li>Kā visiem ierakstiem reizē iegūt atskaites kolonu vai vēl labāk vairākas, vai vislabāk visas kolonas?</li>
<li>Kā veikt noteiktu kvalitātes pārbaudi nevis vienam ierakstam, bet kā to paveikt visiem ierakstiem reizē? Vai sliktākajā gadījumā ierakstu daļai?</li>
<li>Kā ierakstīt tabulā nevis viena ieraksta datus, bet kā ierakstīt visus uzreiz.</li>
</ul>
<p>Tātad <strong>domāt kopās</strong> nozīmē nevis</p>
<ul>
<li>paņemt kārtējo ierakstu un izpildīt tam 17 pārbaudes un tad to izmētāt pa 10 tabulām,</li>
</ul>
<p>bet</p>
<ul>
<li>visiem ierakstiem reizē izpildīt pārbaudi 1, 2, &#8230; , 17 un tad visus ierakstus reizē ielikt tabulā 1, 2, &#8230;, 10.</li>
</ul>
<p>Tātad <strong>domāt kopās</strong> nozīmē nevis</p>
<ul>
<li>paņemt kārtējo ierakstu un izrēķināt tam visas atskaites kolonas, pieskaitīt tās starprezultātam un beigās izdot gala rezultātu,</li>
</ul>
<p>bet</p>
<ul>
<li>izrēķināt kolonu A visiem ierakstiem, izrēķināt kolonu B visiem ierakstiem, optimālā gadījumā šos rēķinus apvienojot vienā vaicājumā.</li>
</ul>
<p>Protams, nevajadzētu šo pasākumu kaut kādā veidā nomaskēt, piemēram, ar lietotāja definētu funkciju, kas tiek izsaukta katram pārbaudāmajam ierakstam un kurā, savukārt, atkal iekšā ir ntie vaicājumi. Šādā veidā ieguvums vai nu nebūs nekāds, vai relatīvi niecīgs.</p>
<p>Iespējams arī, ka Jūs nevarat VISUS ierakstus apstrādāt vienlaicīgi, t.i., atkarībā no ieraksta veida un datiem veicamās darbības ir ļoti atšķirīgas. Tādā gadījumā Jūs noteikti varat ierakstus sadalīt loģiskās daļās, kur visiem vienas daļas ierakstiem veicamā darbība ir vienāda.</p>
<h3>Kāds ir ieguvums?</h3>
<p>Galvenais ieguvums ir tāds, ka izveidotais process vairs nav tieši proporcionāli atkarīgs no ierakstu skaita. Kāpēc? Tam ir vairāki iemesli:</p>
<ul>
<li>Protams, ka palielinoties ierakstu skaitam, izveidotajiem SQL teikumiem būs jāapstrādā lielāks datu apjoms, taču parasti šis process nav tieši proporcionāls datu apjomam, tas ir &#8211; ir iespēja datus apstrādāt ātrāk nekā tieši proporcionāli.</li>
<li>Nav nepieciešams atkal un atkal lasīt vienus un tos pašus datus (klasifikatorus vai citus references datus), kas neglābjami būs, ja notiks apstrāde ierakstu pa ierakstam.</li>
<li>Nav nepieciešams atkal un atkal izpildīt vienus un tos pašus mazos SQL teikumiņus, kas katrs prasa maz laika, bet kopsummā tomēr laiks salasās.</li>
<li>Nav nepieciešams mētāties no procedurālās programmēšanas vides uz SQL vidi. Oraclē tas ir PL/SQL un SQL, citur tas var būt kaut kas cits, bet ideja nemainās un laiks tiek patērēts.</li>
</ul>
<p>Laika izteiksmē ieguvums, protams, ir atkarīgs no datu daudzuma, izejas stāvokļa un gala stāvokļa, cik viens un otrs ir bijis optimāls. Bet ir redzēti gadījumi, gan kad ieguvums ir bezgalīgs, jo nevienam nebija pacietības sagaidīt rezultātu no ierakstu pa ierakstam pieejas <img src='http://s.wordpress.com/wp-includes/images/smilies/face-wink.png' alt=';)' class='wp-smiley' />  , un arī tādas reizes, kad ieguvums ir bijis vismaz par kārtu.</p>
<h3>Tālākā lasāmviela</h3>
<ul>
<li><a href="http://datubazes.wordpress.com/2009/01/23/7-lietas-ko-nevajag-darit/" target="_self">7 lietas, ko nevajag darīt</a>;</li>
<li><a href="http://weblogs.sqlteam.com/jeffs/archive/2007/04/30/60192.aspx" target="_blank">Thinking Set-Based &#8230;. or not?</a> - raksts par to, ka problēmas ir jāmēģina saskaldīt un atrisināt soli pa solim.</li>
</ul>
Posted in Ātrdarbība  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/datubazes.wordpress.com/962/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/datubazes.wordpress.com/962/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/datubazes.wordpress.com/962/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/datubazes.wordpress.com/962/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/datubazes.wordpress.com/962/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/datubazes.wordpress.com/962/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/datubazes.wordpress.com/962/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/datubazes.wordpress.com/962/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/datubazes.wordpress.com/962/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/datubazes.wordpress.com/962/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=datubazes.wordpress.com&blog=1883718&post=962&subd=datubazes&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://datubazes.wordpress.com/2009/04/03/paradigmas-maina-sql-atrdarbiba/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Gints</media:title>
		</media:content>
	</item>
		<item>
		<title>Kurā vēlēšanu iecirknī balsot?</title>
		<link>http://datubazes.wordpress.com/2009/03/30/kura-velesanu-iecirkni-balsot/</link>
		<comments>http://datubazes.wordpress.com/2009/03/30/kura-velesanu-iecirkni-balsot/#comments</comments>
		<pubDate>Mon, 30 Mar 2009 14:27:31 +0000</pubDate>
		<dc:creator>Gints Plivna</dc:creator>
				<category><![CDATA[Interneta resursi]]></category>
		<category><![CDATA[likumdošana]]></category>

		<guid isPermaLink="false">http://datubazes.wordpress.com/?p=952</guid>
		<description><![CDATA[Tuvojoties nākošajām pašvaldību un eiroparlamenta vēlēšanām dzīve Latvijas vēlētājiem &#8211; interneta lietotājiem &#8211; ir kļuvusi mazliet vieglāka. Ja esat apzinīgs Latvijas pilsonis (vai ES valsts pilsonis) un neesat saņēmis vēstuli ar informāciju, kurā vēlēšanu iecirknī esat reģistrēts, vai arī veiksmīgi esat to pakāsis, un Jūs nomoka mūžīgais jautājums &#8220;KUR BALSOT?&#8220;, tad viss vēl nav zaudēts, jo [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=datubazes.wordpress.com&blog=1883718&post=952&subd=datubazes&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Tuvojoties nākošajām pašvaldību un eiroparlamenta vēlēšanām dzīve Latvijas vēlētājiem &#8211; interneta lietotājiem &#8211; ir kļuvusi mazliet vieglāka. Ja esat apzinīgs Latvijas pilsonis (vai ES valsts pilsonis) un neesat saņēmis vēstuli ar informāciju, kurā vēlēšanu iecirknī esat reģistrēts, vai arī veiksmīgi esat to <em>pakāsis</em>, un Jūs nomoka mūžīgais jautājums &#8220;<strong>KUR BALSOT?</strong>&#8220;, tad viss vēl nav zaudēts, jo savu vēlēšanu iecirkni var uzzināt ļoti vienkārši pat nemaksājot ne santīma zvanam uz CVK informatīvo tālruni. Vienkārši ir jauns e-pakalpojums <a href="http://epak.pmlp.gov.lv/NYX.Nyx002.WebSite/Default.aspx" target="_blank">&#8220;<strong>Vēlēšanu iecirkņa noskaidrošana</strong>&#8220;</a>, kurā katram atliek ievadīt personas kodu, uzvārdu un vārdu un Jums taps skaidrs, kādā iecirknī esat vai neesat reģistrēts. Tātad informācija no <a href="https://www.visr.eps.gov.lv/visr/" target="_blank">valsts nozīmes datubāzes</a> &#8211; <a href="https://www.visr.eps.gov.lv/visr/default.aspx?action=2&amp;rid=39" target="_blank">Vēlētāju reģistra</a> &#8211; ir kļuvusi parastiem mirstīgajiem mazliet pieejamāka.</p>
<p>Atgādinu arī, ka e-pakalpojumi (vai vismaz lietas, kas par tādām ir nosauktas) ir pieejami arī:</p>
<ul>
<li>Portālā <a href="https://www.latvija.lv/LV/LDV/Default.aspx" target="_blank">latvija.lv</a> - šī nu, protams, ir visslavenākā vietne no visiem e-pakalpojumu sniedzējiem <img src='http://s.wordpress.com/wp-includes/images/smilies/face-wink.png' alt=';)' class='wp-smiley' />  Patīkami, ka pašlaik autentificēties var arī ar internetbankas kontu &#8211; tātad nav nepieciešams tikai Latvijas pasta e-paraksts.</li>
<li><a href="http://www.riga.lv/LV/Channels/Municipal_services/Advanced_Services/default.htm" target="_blank">Rīgas pašvaldības portālā</a> - piemēram, kura vieta kurā bērnudārzā ir Jūsu sīkajam, kam autorizācija nav nepieciešama un visādas citādas lietas ar nepieciešamu autentifikāciju. Arī šeit var izmantot internetbankas kontus.</li>
<li><a href="https://www.csdd.lv/" target="_blank">CSDD</a> &#8211; uzzini savus soda punktus, mašīnas, kas Jums pieder, dabūt vienas dienas atļauju utml. Pietiek ar to, ka Jums ir e-pasts un vadītāja apliecība.</li>
</ul>
<p>Protams, ir vēl milzums vietnes, kurās šis tas ir elektroniski pieejams, taču tajās dotā informācija ir saistoša mazākam cilvēku skaitam.</p>
Posted in Interneta resursi, likumdošana  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/datubazes.wordpress.com/952/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/datubazes.wordpress.com/952/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/datubazes.wordpress.com/952/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/datubazes.wordpress.com/952/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/datubazes.wordpress.com/952/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/datubazes.wordpress.com/952/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/datubazes.wordpress.com/952/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/datubazes.wordpress.com/952/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/datubazes.wordpress.com/952/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/datubazes.wordpress.com/952/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=datubazes.wordpress.com&blog=1883718&post=952&subd=datubazes&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://datubazes.wordpress.com/2009/03/30/kura-velesanu-iecirkni-balsot/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Gints</media:title>
		</media:content>
	</item>
		<item>
		<title>Oracle SQL teikuma izpildes plāns &#8211; prezentācija</title>
		<link>http://datubazes.wordpress.com/2009/03/28/oracle-sql-teikuma-izpildes-plans-prezentacija/</link>
		<comments>http://datubazes.wordpress.com/2009/03/28/oracle-sql-teikuma-izpildes-plans-prezentacija/#comments</comments>
		<pubDate>Sat, 28 Mar 2009 19:30:44 +0000</pubDate>
		<dc:creator>Gints Plivna</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Pasākumi]]></category>

		<guid isPermaLink="false">http://datubazes.wordpress.com/?p=937</guid>
		<description><![CDATA[Latvijas Oracle lietotāju grupas (LVOUG) pirmā konference/seminārs ir veiksmīgi beidzies &#8211; paldies tā organizētājiem! Nezinu īsti, cik oficiāli bija cilvēku pieteikušies, bet es teiktu, ka kāds simtiņš kopā sanāca. Pasākums bija atšķirīgs no oficiālājām Oracle dienām ar to, ka nebija nevienas prezentācijas (vismaz no tām, ko apmeklēju es), kurā nodarbotos ar mārketingu   Visas [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=datubazes.wordpress.com&blog=1883718&post=937&subd=datubazes&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Latvijas Oracle lietotāju grupas (LVOUG) pirmā konference/seminārs ir veiksmīgi beidzies &#8211; paldies tā organizētājiem! Nezinu īsti, cik oficiāli bija cilvēku pieteikušies, bet es teiktu, ka kāds simtiņš kopā sanāca. Pasākums bija atšķirīgs no oficiālājām Oracle dienām ar to, ka nebija nevienas prezentācijas (vismaz no tām, ko apmeklēju es), kurā nodarbotos ar mārketingu <img src='http://s.wordpress.com/wp-includes/images/smilies/face-wink.png' alt=';)' class='wp-smiley' />  Visas prezentācijas bija tehniski orientētas un bez oficiālajiem reklāmas rullīšiem.</p>
<p>Arī es stāstīju prezentāciju par SQL teikuma izpildes plānu - kā to iegūt, kā attēlot, kā saprast un kā uzlabot. Centos pastāstīt arī par dažām visbiežāk izpildāmajām operācijām un jo sevišķi sīkāk par fiziskajiem savienojumu izpildes veidiem (<em>nested loops, hash join, sort merge join</em>).</p>
<p>Tiem, kam ir dziļāka interese par SQL teikuma izpildes plānu un kam nepaveicās nokļūt uz <a href="http://datubazes.wordpress.com/2008/11/24/oracle-troubleshooting-seminars/" target="_self">neseno Tanela Podera semināru</a>, es gribētu speciāli uzsvērt <a href="http://blog.tanelpoder.com/2009/03/14/new-presentation-slides-plus-aot-seminars-in-hong-kong-and-dallas/" target="_blank">šo viņa emuāra rakstu</a>, kurā ir saite uz failu &#8220;Oracle SQL Plan Execution: How It Really Works&#8221;. Tā prezentācija ir ļoti interesanta pat tad, ja klātienē nedzirdējāt sīkāku stāstu.</p>
<p>Un visbeidzot šeit ir arī saite uz manis lasīto <a href="http://datubazes.files.wordpress.com/2009/03/oracle-sql-teikuma-izpildes-plans-execution-plan.pdf" target="_blank">prezentāciju par to kā saprast SQL teikuma izpildes plānu</a>.</p>
Posted in Oracle, Pasākumi  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/datubazes.wordpress.com/937/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/datubazes.wordpress.com/937/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/datubazes.wordpress.com/937/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/datubazes.wordpress.com/937/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/datubazes.wordpress.com/937/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/datubazes.wordpress.com/937/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/datubazes.wordpress.com/937/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/datubazes.wordpress.com/937/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/datubazes.wordpress.com/937/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/datubazes.wordpress.com/937/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=datubazes.wordpress.com&blog=1883718&post=937&subd=datubazes&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://datubazes.wordpress.com/2009/03/28/oracle-sql-teikuma-izpildes-plans-prezentacija/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Gints</media:title>
		</media:content>
	</item>
		<item>
		<title>Izvilkums iz Latvijas blogiem II cēliens &#8230;</title>
		<link>http://datubazes.wordpress.com/2009/03/24/izvilkums-iz-latvijas-blogiem-ii-celiens/</link>
		<comments>http://datubazes.wordpress.com/2009/03/24/izvilkums-iz-latvijas-blogiem-ii-celiens/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 07:10:36 +0000</pubDate>
		<dc:creator>Gints Plivna</dc:creator>
				<category><![CDATA[Nekategorizēts]]></category>

		<guid isPermaLink="false">http://datubazes.wordpress.com/?p=487</guid>
		<description><![CDATA[&#8230; par datubāzēm, protams, ko gan citu?
Apaļš gads ir pagājis kopš iepriekšējā apkopojuma ar saitēm uz citiem blogu rakstiem par datubāzēm. Šai laikā ir uzradušies 2 jauni emuāri, kas ir uzrakstījuši vairāk nekā vienu ierakstu, kuri likās pietiekami interesanti. Saskaņā ar kaktuzs iedalījumu (kurš man ļoti iepatikās   ) šiem rakstītājiem ir bijušas idejas [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=datubazes.wordpress.com&blog=1883718&post=487&subd=datubazes&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>&#8230; par datubāzēm, protams, ko gan citu?</p>
<p>Apaļš gads ir pagājis kopš <a href="http://datubazes.wordpress.com/2008/03/24/saites/" target="_self">iepriekšējā apkopojuma ar saitēm uz citiem blogu rakstiem</a> par datubāzēm. Šai laikā ir uzradušies 2 jauni emuāri, kas ir uzrakstījuši vairāk nekā vienu ierakstu, kuri likās pietiekami interesanti. Saskaņā ar <a href="http://kaktuzs.wordpress.com/2009/02/11/vel-mazliet-par-forumiem-un-blogiem/" target="_blank">kaktuzs iedalījumu</a> (kurš man ļoti iepatikās <img src='http://s.wordpress.com/wp-includes/images/smilies/face-smile.png' alt=':)' class='wp-smiley' />  ) šiem rakstītājiem ir bijušas idejas un pacietība veselam mēnesim (vismaz konkrētajā jomā), jācer, ka būs arī turpinājums. Divi augšminētie ir <a href="http://alx.f1.lv/category/project/" target="_blank">alx</a> un <a href="http://www.iinuu.lv/?id=230" target="_blank">iinuu</a>. Bet tagad viss uzskaitījums (vēlos arī piezīmēt, ka ne viss ir ļoti labā kvalitātē un ne visam es piekrītu):</p>
<h3>MySQL</h3>
<ul>
<li><a href="http://apblog.lv/2008/10/14/sql-kartosana-un-null-vertibas/" target="_blank">Kārtošana un NULL vērtības</a>;</li>
<li><a href="http://defektologs.lv/2008/12/01/rekursiva-lapas-karte/" target="_blank">Rekursīva lapas karte</a>;</li>
<li><a href="http://defektologs.lv/2009/01/24/ierakstu-dalisana-pa-lappusem/" target="_blank">Ierakstu dalīšana pa lappusēm</a>;</li>
<li><a href="http://alx.f1.lv/2009/01/11/web-projektu-scalability/" target="_blank">Web izstrāde &#8211; slodzes un optimizācijas</a>;</li>
<li><a href="http://alx.f1.lv/2009/01/15/mysql-gettext/" target="_blank">Mysql &gt; gettext</a>;</li>
<li><a href="http://alx.f1.lv/2009/01/09/performances-meklejumos/" target="_blank">Performances meklējumos</a>;</li>
<li><span style="font-size:12pt;font-family:'Times New Roman';" lang="LV"><a href="http://www.iinuu.lv/?id=233" target="_blank">Nākamā id vērtība (next_id, auto_increment)</a>;</span></li>
<li><span style="font-size:12pt;font-family:'Times New Roman';" lang="LV"><span style="font-size:12pt;font-family:'Times New Roman';" lang="LV"><a href="http://www.iinuu.lv/?id=236" target="_blank">Lietotāja definētie mainīgie sql vaicājumā</a>;</span></span></li>
<li><span style="font-size:12pt;font-family:'Times New Roman';" lang="LV"><span style="font-size:12pt;font-family:'Times New Roman';" lang="LV"><span style="font-size:12pt;font-family:'Times New Roman';" lang="LV"><a href="http://www.iinuu.lv/?id=240" target="_blank">Null, 0, vai -1 kā noklusētā vērtība?</a></span></span></span></li>
<li><span style="font-size:12pt;font-family:'Times New Roman';" lang="LV"><span style="font-size:12pt;font-family:'Times New Roman';" lang="LV"><span style="font-size:12pt;font-family:'Times New Roman';" lang="LV"><a href="http://orvils.blogspot.com/2009/02/ka-optimizet-mysql-kverijus-ar-datuma.html" target="_blank">Kā optimizēt MySQL kverijus ar datuma intervālu</a>.</span></span></span></li>
</ul>
<h3>SQL Server</h3>
<ul>
<li><a href="http://dotnet.lv/blogs/ia/archive/2008/11/06/linq-to-sql-pret-linq-to-entities.aspx" target="_blank">LINQ to SQL pret LINQ to Entities</a>;</li>
<li><a href="http://dotnet.lv/blogs/am/archive/2008/10/21/ms-sql-cukuri-select-top.aspx" target="_blank">MS SQL TOP</a>.<br />
 </li>
</ul>
<h3>Vispārīgi</h3>
<ul>
<li><a href="http://webdev.gold.lv/2008/10/drosibas-pamati-web-lapas/" target="_blank">Drošības pamati web lapās</a>;</li>
<li><a href="http://dll.lv/datubazes-strukturas-mantosana-klasifikacija-arks/" target="_blank">Datubāzes struktūras: mantošana, klasifikācija, arks</a>;</li>
<li><a href="http://dll.lv/datubazes-normalformas-vai-ka-projektet-pareizi/" target="_blank">Datubāzes normālformas vai kā projektēt pareizi</a>.</li>
</ul>
Posted in Nekategorizēts  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/datubazes.wordpress.com/487/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/datubazes.wordpress.com/487/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/datubazes.wordpress.com/487/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/datubazes.wordpress.com/487/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/datubazes.wordpress.com/487/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/datubazes.wordpress.com/487/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/datubazes.wordpress.com/487/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/datubazes.wordpress.com/487/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/datubazes.wordpress.com/487/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/datubazes.wordpress.com/487/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=datubazes.wordpress.com&blog=1883718&post=487&subd=datubazes&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://datubazes.wordpress.com/2009/03/24/izvilkums-iz-latvijas-blogiem-ii-celiens/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Gints</media:title>
		</media:content>
	</item>
		<item>
		<title>Datori un datu bāzes pilnīgiem &#8220;čaiņikiem&#8221;</title>
		<link>http://datubazes.wordpress.com/2009/03/14/datori-un-datu-bazes-pilnigiem-cainikiem/</link>
		<comments>http://datubazes.wordpress.com/2009/03/14/datori-un-datu-bazes-pilnigiem-cainikiem/#comments</comments>
		<pubDate>Sat, 14 Mar 2009 07:40:27 +0000</pubDate>
		<dc:creator>Gints Plivna</dc:creator>
				<category><![CDATA[Interneta resursi]]></category>

		<guid isPermaLink="false">http://datubazes.wordpress.com/?p=910</guid>
		<description><![CDATA[Sērfojot pa internetu uzdūros vietnei esaite.lv, kurā ir atrodami dažādi digitālie mācību materiāli latviski, tai skaitā arī par datu bāzēm uz Windows un Linux operētājsistēmām. Tā kā mani interesē viss, kas vairāk vai mazāk ir saistīts ar datubāzēm (jo sevišķi latviski), tad sāku pētīt, ko tad mūsu cienījamie universitātes mācību spēki ir radījuši.
Pirmais iespaids bija visnotaļ [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=datubazes.wordpress.com&blog=1883718&post=910&subd=datubazes&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Sērfojot pa internetu uzdūros vietnei <a href="http://www.esaite.lv" target="_blank">esaite.lv</a>, kurā ir atrodami dažādi <a href="http://www.esaite.lv/macibu_materiali.html" target="_blank">digitālie mācību materiāli latviski</a>, tai skaitā arī par datu bāzēm uz Windows un Linux operētājsistēmām. Tā kā mani interesē viss, kas vairāk vai mazāk ir saistīts ar datubāzēm (jo sevišķi latviski), tad sāku pētīt, ko tad mūsu cienījamie universitātes mācību spēki ir radījuši.</p>
<p>Pirmais iespaids bija visnotaļ dīvains, jo bija acīmredzami, ka es visdrīzāk Eiropas datorprasmes sertifikātu neiegūtu; attiecīgi saskaņā ar formulējumu dokumentā man nebūtu &#8220;zināšanas par datu bāzes pamatjēdzieniem, un es nevarētu parādīt, ka protu strādāt ar datu bāzi datorā.&#8221; <img src='http://s.wordpress.com/wp-includes/images/smilies/face-smile-big.png' alt=':D' class='wp-smiley' /> </p>
<p>OK tātad kas šai 2 dokumentos par datu bāzēm:</p>
<ul>
<li><a href="http://www.esaite.lv/JRPIC_Windows/ECDLModulis5S.pdf" target="_blank">datu bāzes Windows vidē (Microsoft Access iesācēja rokasgrāmata latviski)</a> un</li>
<li><a href="http://www.esaite.lv/JRPIC_Linux/ECDLModulis5OO_S.pdf" target="_blank">datu bāzes Linux vidē (OpenOffice.org Base iesācēja rokasgrāmata latviski)</a></li>
</ul>
<p>ir atrodams?</p>
<ol>
<li>Tās ir ļoti specifiskas konkrētajai programmatūrai (attiecīgi Access un OO Base) lielu un pamatīgu uzsvaru liekot uz tādām <em>svarīgām </em>lietām, kā konkrētas ikonas izskatu un kur izvēlnēs ir atrodama konkrēta darbība.</li>
<li>Tās ir pamatīgi ilustrētas ar ekrānšāviņiem un pilnīgam iesācējam ļauj soli pa solim paveikt nepieciešamās darbības.</li>
<li>Pretendējot uz vispārīgu ieskatu par datubāzēm kā tādām, dokumenti satur faktuālas kļūdas, piemēram, apgalvojumu, ka <a href="http://datubazes.wordpress.com/2009/03/04/indeksi/" target="_self">indekss</a> esot datu lauka atribūts vai &#8220;tikai tad, ja ir izveidotas tabulu saistības (ar to domājot ārējās atslēgas), ir iespējams veikt darbības ar informāciju, kas atrodas dažādās tabulās un ir loģiski saistīta&#8221;.</li>
<li>Tajos ne ar vārdu nav pieminēts <a href="http://datubazes.wordpress.com/2007/10/11/kas-ir-sql/" target="_self">SQL</a>.</li>
<li>Sīkums, protams, bet visnotaļ komiski izskatās projekta nosaukums dokumenta virsrakstā &#8220;IKT ZINĀŠANU STANDARTIZĀCIJA ZEMGALES REĢIONĀ&#8221;, kas vedina uz domām, ka datu bāzes Latgalē ir atšķirīgas un Kurzemē noteikti būs ar Ventiņu &#8220;tā viš i&#8221; īpatnībām <img src='http://s.wordpress.com/wp-includes/images/smilies/face-smile.png' alt=':)' class='wp-smiley' /> </li>
</ol>
<p>Tomēr lasītājam, kas vēlas apgūt tieši <a href="http://office.microsoft.com/access" target="_blank">Microsoft Access</a> vai <a href="http://www.openoffice.org/product/base.html" target="_blank">OpenOffice.org Base</a>, kā pirmais iepazīšanās solis šie dokumenti varētu būt interesanti un noderīgi. Pie tam šai vietnē ir vēl citi mācību materiāli, kas domāti pilnīgiem iesācējiem datorlietās, un man jau ir padomā daži radinieki, kam šo lapu parādīt <img src='http://s.wordpress.com/wp-includes/images/smilies/face-smile.png' alt=':)' class='wp-smiley' /> </p>
Posted in Interneta resursi  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/datubazes.wordpress.com/910/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/datubazes.wordpress.com/910/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/datubazes.wordpress.com/910/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/datubazes.wordpress.com/910/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/datubazes.wordpress.com/910/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/datubazes.wordpress.com/910/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/datubazes.wordpress.com/910/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/datubazes.wordpress.com/910/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/datubazes.wordpress.com/910/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/datubazes.wordpress.com/910/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=datubazes.wordpress.com&blog=1883718&post=910&subd=datubazes&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://datubazes.wordpress.com/2009/03/14/datori-un-datu-bazes-pilnigiem-cainikiem/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Gints</media:title>
		</media:content>
	</item>
		<item>
		<title>Indeksu spožums un posts</title>
		<link>http://datubazes.wordpress.com/2009/03/04/indeksi/</link>
		<comments>http://datubazes.wordpress.com/2009/03/04/indeksi/#comments</comments>
		<pubDate>Wed, 04 Mar 2009 08:00:52 +0000</pubDate>
		<dc:creator>Gints Plivna</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://datubazes.wordpress.com/?p=56</guid>
		<description><![CDATA[
Kas ir indekss?
Indeksi popularitātes ziņā droši vien ir nākošie objekti datubāzēm pēc tabulām. Tos bieži izmanto vietā un iespējams gandrīz tikpat bieži patiesībā lieto nevajadzīgi. Bet tātad vispirms būtu jāsaprot, kas tad tie ir un kāda aptuveni ir to uzbūve.
Parasti runājot par indeksiem vispirms tos saprot kā kokveidīgu struktūru, kuras pirmais un galvenais uzdevums ir [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=datubazes.wordpress.com&blog=1883718&post=56&subd=datubazes&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a id="101" title="h1" name="h1"></a></p>
<h3>Kas ir indekss?</h3>
<p>Indeksi popularitātes ziņā droši vien ir <a href="http://datubazes.wordpress.com/2007/12/03/datubaze/" target="_self">nākošie objekti datubāzēm</a> pēc tabulām. Tos bieži izmanto vietā un iespējams gandrīz tikpat bieži patiesībā lieto nevajadzīgi. Bet tātad vispirms būtu jāsaprot, kas tad tie ir un kāda aptuveni ir to uzbūve.</p>
<p>Parasti runājot par indeksiem vispirms tos saprot kā kokveidīgu struktūru, kuras pirmais un galvenais uzdevums ir ātri atrast datus tabulā, kuras dati, ja vien tā nav ļoti speciāla veida tabula, ir nesakārtoti. Nākošajā attēlā ir parādīta konceptuāla indeksa struktūra. Protams, ka reālajās implementācijās <a href="http://datubazes.wordpress.com/2007/11/16/db-saraksts/" target="_self">katrā DBVS</a> tas ir mazliet atšķirīgi, bet ideja paliek viena un tā pati &#8211; koks, pa kuru ātri nonāk līdz nepieciešamajai vērtībai un tad taisnā ceļā izmantojot norādes dodas uz tabulu, no kuras var nolasīt konkrēto ierakstu. Nevajadzētu, protams, arī uztvert datu bloku skaitīšanu kā precīzu algoritmu, kas pie šīm vērtībām tā arī notiek, bet drīzāk kā konceptuālu ideju.</p>
<div id="attachment_848" class="wp-caption alignnone" style="width: 460px"><img class="size-full wp-image-848" title="Indekss" src="http://datubazes.files.wordpress.com/2009/02/indeksi4.jpg?w=450&#038;h=375" alt="Indekss un tabula" width="450" height="375" /><p class="wp-caption-text">Indekss un tabula</p></div>
<p>Tātad, ja mēs meklējam vērtību &#8220;Kuldīga&#8221; (nosacījums WHERE pilsetas_nosaukums = &#8216;Kuldīga&#8217;) tabulā, tad mums ir divas iespējas:<span id="more-56"></span></p>
<ul>
<li>skanējam cauri visu tabulu (<em>full scan</em>), kurā dati ir nesakārtoti, un atrodam attiecīgo ierakstu. Šai piemērā tas nosacīti prasītu 6 tabulas bloku lasījumus.</li>
<li>atrodam precīzu vērtību indeksā, kurā vērtības ir sakārtotas. Tur meklēšanas ceļš (attēlā augstāk iezīmēts ar raustītu līniju) ir šāds &#8211; iekavās attēlots nolasīto bloku skaits kopumā:
<ul>
<li>&#8220;Kuldīga&#8221; &lt; &#8220;O&#8221;, kas ir indeksa saknes  blokā (<em>root block</em>), tātad jāiet pa kreisi. (1)</li>
<li>&#8220;Kuldīga&#8221; &gt; &#8220;K&#8221;, kas ir zarā pa kreisi (<em>branch block</em>), tātad jaiet pa labi. (2)</li>
<li>Nākošā pa labi ir lapa (<em>leaf block</em>), kura satur vērtību &#8220;Kuldīga&#8221; un precīzu norādi uz tabulas ierakstu. (3)</li>
<li>Nolasam tabulas bloku ar vērtību &#8220;Kuldīga&#8221;. Esam kopumā nolasījuši 4 datu blokus, kas ir mazāk nekā lasot visus tabulas datus. (4)</li>
</ul>
</li>
</ul>
<p>Apskatīsim otru piemēru &#8211; gribam atrast visas pilsētas, kuru nosaukumi sākas ar R (nosacījums WHERE pilsetas_nosaukums LIKE &#8216;R%&#8217;). Vizuāli meklēšanas ceļš ir šāds.</p>
<div id="attachment_850" class="wp-caption alignnone" style="width: 460px"><img class="size-full wp-image-850" title="Indekss" src="http://datubazes.files.wordpress.com/2009/02/indeksi22.jpg?w=450&#038;h=379" alt="Vairāku vērtību nolasīšana no indeksa" width="450" height="379" /><p class="wp-caption-text">Vairāku vērtību nolasīšana no indeksa</p></div>
<ul>
<li>Pilnas tabulas skans ir tāds pats kā iepriekš, tajā nekas nemainās.</li>
<li>Savukārt meklēšana pēc indeksa (attēlā ar raustītām līnijām) būs šāda:
<ul>
<li>&#8220;R&#8221; &gt; &#8220;O&#8221;, tātad jāiet pa labi. (1)</li>
<li>&#8220;R&#8221; &lt; &#8220;T&#8221;, tātad jāiet pa kreisi. (2)</li>
<li>Indeksa lapā atrodam vērtību &#8220;Rēzekne&#8221;, kas atbilst nosacījumam. (3)</li>
<li>Pēc indeksa norādes precīzi atrodam ierakstu tabulā un nolasam šo bloku. (4)</li>
<li>Indeksa lapā atrodam vērtību &#8220;Rīga&#8221;, kas atbilst nosacījumam. (4)</li>
<li>Pēc indeksa norādes precīzi atrodam ierakstu tabulā un nolasam šo bloku. (5) Tātad kopsummā esam apmeklējuši 5 datu blokus, kas ir mazāk nekā 6 ko prasītu pilna tabulas skanēšana.</li>
</ul>
</li>
</ul>
<p>Pilnam komplektam arī trešais piemērs &#8211; gribam atrast pilsētas, kuru nosaukumi ir lielāki nekā &#8220;R&#8221; bet mazāki nekā &#8220;U&#8221; (nosacījums WHERE pilsetas_nosaukums BETWEEN &#8216;R&#8217; AND &#8216;U&#8217;). Vizuāli tas izskatās šādi:</p>
<div id="attachment_851" class="wp-caption alignnone" style="width: 460px"><img class="size-full wp-image-851" title="Index range scan" src="http://datubazes.files.wordpress.com/2009/02/indeksi31.jpg?w=450&#038;h=386" alt="Vairāku vērtību nolasīšana no indeksa (arī vairākām indeksa lapām)" width="450" height="386" /><p class="wp-caption-text">Vairāku vērtību nolasīšana no indeksa (arī vairākām indeksa lapām)</p></div>
<ul>
<li>Pilnas tabulas skans ir tāds pats kā iepriekš, tajā nekas nemainās.</li>
<li>Savukārt meklēšana pēc indeksa (attēlā ar raustītām līnijām, <strong>pievērsiet uzmanību raustītajai līnijai starp lapām</strong>) būs šāda:
<ul>
<li>&#8220;R&#8221; &gt; &#8220;O&#8221;, tātad jāiet pa labi. (1)</li>
<li>&#8220;R&#8221; &lt; &#8220;T&#8221;, tātad jāiet pa kreisi. (2)</li>
<li>Indeksa lapā atrodam vērtību &#8220;Rēzekne&#8221;, kas atbilst nosacījumam. (3)</li>
<li>Pēc indeksa norādes precīzi atrodam ierakstu tabulā un nolasam šo bloku. (4)</li>
<li>Indeksa lapā atrodam vērtību &#8220;Rīga&#8221;, kas atbilst nosacījumam. (4)</li>
<li>Pēc indeksa norādes precīzi atrodam ierakstu tabulā un nolasam šo bloku. (5)</li>
<li>Šai indeksa lapā vairāk vērtību nav tāpēc jāiet uz nākošo lapu pa labi. Indeksa lapā atrodam vērtību &#8220;Talsi&#8221;, kas atbilst nosacījumam. (6)</li>
<li>Pēc indeksa norādes precīzi atrodam ierakstu tabulā un nolasam šo bloku. (7) Vairāk vērtību atbilstoši nosacījumiem nav. Tātad kopsummā esam apmeklējuši 7 datu blokus, kas ir vairāk nekā 6, ko prasītu pilna tabulas skanēšana, tātad šai gadījumā tabulas pilna skanēšana būtu lētāka nekā lasīšana indekss-tabula.</li>
</ul>
</li>
</ul>
<p><a id="102" title="h2" name="h2"></a></p>
<h3>Indeksa izveides sintakse</h3>
<pre>CREATE [UNIQUE] INDEX &lt;indeksa vārds&gt;
ON &lt;tabulas vārds&gt; (&lt;kolona1&gt;[, &lt;kolona2&gt;[, ..., &lt;kolonaN&gt;]]); </pre>
<ul>
<li>Indeksam ir jāpiešķir &lt;indeksa vārds&gt;. Atkarībā no DBVS tam jābūt unikālam tabulas ietvaros (MySQLā piemēram), vai shēmas ietvaros (Oraclē).</li>
<li>ON klauzā tiek norādīts kādai tabulai indekss tiek veidots.</li>
<li>Iekavās var rakstīt vienu vai vairākas kolonas uz kurām indeksu veidot. Vairāku kolonu gadījumā tas būs kompozītais (<em>composite</em>) indekss.</li>
</ul>
<p>Savukārt, lai tiktu vaļā no indeksa ir jaizmanto variācija par</p>
<pre>DROP INDEX &lt;indeksa vārds&gt;</pre>
<p>MySQLā tai vēl ON klauzā jānorāda tabulas vārds, kas gluži loģiski jo vienā datubāzē var būt vairāki indeksi ar vienādu vārdu, tāpēc jāprecizē tabula.<br />
<a id="103" title="h3" name="h3"></a></p>
<h3>Indeksu piemēri un operācijas &#8211; <em>indeksu spožums</em></h3>
<p>Piemēriem izmantosim zemāk redzamo tabulu un datus, kā arī indeksu uz pilsētas nosaukuma. Tā kā Latvijā pilsētu nosaukumi ir unikāli, tad varam veidot unikālo indeksu. Iedzīvotāju skaits ņemts no <a href="http://www.kartes.lv/lat/1240a_map.php?map_id=427" target="_blank">Lielā pasaules atlanta</a>.</p>
<pre>CREATE TABLE pilsetas (
  id INTEGER PRIMARY KEY,
  pilsetas_nosaukums varchar(40),
  iedz_skaits INTEGER);
INSERT INTO pilsetas VALUES (1, 'Rīga', 719600);
INSERT INTO pilsetas VALUES (2, 'Kuldīga', 13000);
-- šī komanda ir specifiska Oracle un tās mērķis ir nodrošināt,
-- ka vienā datu blokā ir ne vairāk kā 2 ieraksti
-- (balstoties uz 2 jau ieliktajiem)
ALTER TABLE pilsetas MINIMIZE records_per_block;
INSERT INTO pilsetas VALUES (3, 'Talsi', 11400);
INSERT INTO pilsetas VALUES (4, 'Ventspils', 43400);
INSERT INTO pilsetas VALUES (5, 'Rēzekne', 35900);
INSERT INTO pilsetas VALUES (6, 'Daugavpils', 106100);
INSERT INTO pilsetas VALUES (7, 'Ogre', 26800);
INSERT INTO pilsetas VALUES (8, 'Valmiera', 27500);
INSERT INTO pilsetas VALUES (9, 'Cēsis', 18200);
INSERT INTO pilsetas VALUES (10, 'Krāslava', 10500);
INSERT INTO pilsetas VALUES (11, 'Bauska', 10200);
INSERT INTO pilsetas VALUES (12, 'Liepāja', 85300);
COMMIT;</pre>
<p><a id="104" title="h4" name="h4"></a></p>
<h3>Piemēru pielietošana Oracle DBVS</h3>
<p>Pagaidām, kamēr mums indeksa nav, paskatamies, cik datu bloki tiek nolasīti. Šim mērķim izmantosim <a href="http://datubazes.wordpress.com/2008/01/30/sqlplus-autotrace/" target="_self">SQL*Plus komandu autotrace</a>. Es atstāšu tikai tos rezultātus, kas ir svarīgi šim piemēram, patiesībā izpildes statistika tiek ģenerēta vairāk.</p>
<pre>SQL&gt; set autot on
SQL&gt; SELECT * FROM pilsetas
  2  WHERE pilsetas_nosaukums = 'Kuldīga';
        ID PILSETAS_NOSAUKUMS                       IEDZ_SKAITS
---------- ---------------------------------------- -----------
         2 Kuldīga                                        13000
-------------------------------------------------------------------
| Id  | Operation         | Name     | Rows  | Bytes | Cost (%CPU)|
-------------------------------------------------------------------
|   0 | SELECT STATEMENT  |          |     1 |    48 |     3   (0)|
|*  1 |  TABLE ACCESS FULL| PILSETAS |     1 |    48 |     3   (0)|
-------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter("PILSETAS_NOSAUKUMS"='Kuldīga')
Statistics
----------------------------------------------------------
          16 consistent gets
          1  rows processed</pre>
<p>Tagad izveidojam indeksu un pievēršama uzmanību izpildes plāna izmaiņām un datu bloku nolasījumiem (<em>consistent gets</em>).</p>
<pre>SQL&gt; CREATE UNIQUE INDEX pils_nos_idx
  2  ON pilsetas (pilsetas_nosaukums);
SQL&gt; SELECT * FROM pilsetas
  2  WHERE pilsetas_nosaukums = 'Kuldīga';
        ID PILSETAS_NOSAUKUMS                       IEDZ_SKAITS
---------- ---------------------------------------- -----------
         2 Kuldīga                                        13000
--------------------------------------------------------------------
|Id|Operation                   |Name        |Rows|Bytes|Cost(%CPU)|
--------------------------------------------------------------------
| 0|SELECT STATEMENT            |            |  1 |   48|    1  (0)|
| 1| TABLE ACCESS BY INDEX ROWID|PILSETAS    |  1 |   48|    1  (0)|
|*2|  INDEX UNIQUE SCAN         |PILS_NOS_IDX|  1 |     |    0  (0)|
--------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   2 - access("PILSETAS_NOSAUKUMS"='Kuldīga')
Statistics
----------------------------------------------------------
          2  consistent gets
          1  rows processed</pre>
<p>Tagad skatamies, kas notiek, ja atlasam vērtības no otrā piemēra.</p>
<pre>SQL&gt; SELECT * FROM pilsetas
  2  WHERE pilsetas_nosaukums like 'R%';
        ID PILSETAS_NOSAUKUMS                       IEDZ_SKAITS
---------- ---------------------------------------- -----------
         5 Rēzekne                                        35900
         1 Rīga                                          719600
---------------------------------------------------------------------
|Id|Operation                   |Name        |Rows |Bytes|Cost(%CPU)|
---------------------------------------------------------------------
| 0|SELECT STATEMENT            |            |    2|   96|    3  (0)|
| 1| TABLE ACCESS BY INDEX ROWID|PILSETAS    |    2|   96|    3  (0)|
|*2|  INDEX RANGE SCAN          |PILS_NOS_IDX|    2|     |    1  (0)|
---------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   2 - access("PILSETAS_NOSAUKUMS" LIKE 'R%')
       filter("PILSETAS_NOSAUKUMS" LIKE 'R%')
Statistics
----------------------------------------------------------
          4  consistent gets
          2  rows processed</pre>
<p>Pēdējo gadījumu nesākšu drukāt šeit, jo tas 99% lasītāju būs apnicīgi, vienkārši vienā tabuliņā apkopošu rezultātus.</p>
<table border="1">
<tbody>
<tr>
<th>Statistika</th>
<th><em>full scan<br />
</em>jebkuram filtram</th>
<th><em>unique scan</em><br />
=&#8217;Kuldīga&#8217;</th>
<th><em>range scan</em><br />
like &#8216;R%&#8217;</th>
<th><em>range scan</em><br />
BETWEEN &#8216;R&#8217; AND &#8216;U&#8217;</th>
</tr>
<tr>
<td>Atlasīto ierakstu skaits</td>
<td>1</td>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
<tr>
<td><em>consistent gets</em></td>
<td>16</td>
<td>2</td>
<td>4</td>
<td>5</td>
</tr>
</tbody>
</table>
<p>Tātad kāda morale? Bez indeksa izmantošanas mēs dabūjam 16 datu bloku lasījumus jebkurā gadījumā, pat atlasot vienu ierakstu. Savukārt, ja mums ir unikālais indekss, tad ir divas pamatoperācijas:</p>
<ul>
<li>INDEX UNIQUE SCAN &#8211; tiek izmantota tad, ja DBVS zin, ka tiks atlasīts ne vairāk kā 1 ieraksts. Var protams, atlasīt arī o.  Vispārīgā gadījumā ļoti grūti izdomāt kādu efektīvāku operāciju.</li>
<li>INDEX RANGE SCAN &#8211; tiek izmantota tad, ja izmantojot indeksu ir jānolasa vairākas vērtības pēc kārtas. Šai gadījumā, ja skanēšana ir relatīvi īsa, tad tas var būt efektīvāk nekā pilns tabulas skans, savukārt, ja indeksa skanēšana ir gara, tad tā var būt arī neefektīvāka nekā pilna tabulas skanēšana.</li>
</ul>
<p><a id="105" title="h5" name="h5"></a></p>
<h3>Piemēru pielietošana MySQL DBVS</h3>
<p>Paskatamies kā šie paši plāni izskatīsies MySQLā. Pirmajā gadījumā, kad indeksa vēl nav:</p>
<pre>mysql&gt; explain SELECT * FROM pilsetas
    -&gt; WHERE pilsetas_nosaukums = 'Kuldiga';
+--+-----------+---------+----+-------------+----+----+----+
|id|select_type|table    |type|possible_keys|key |ref |rows|
+--+-----------+---------+----+-------------+----+----+----+
| 1|SIMPLE     |pilsetas |ALL |NULL         |NULL|NULL|12  |
+--+-----------+---------+----+-------------+----+----+----+
+-----------+
|Extra      |
+-----------+
|Using where|
+-----------+</pre>
<p>Kā redzams tajā bija type = ALL, kas viena ieraksta atlasei par neko labu neliecina. Extra kolona arī liecina par to, ka tiek lietots papildus filtrs.</p>
<p>Savukārt, unikālais indeksa skans izskatās šādi. Pievērsiet uzmanību type kolonai un to, ka mums parādās key (indekss), kas tiek izmantots.</p>
<pre>mysql&gt; explain SELECT * FROM pilsetas
    -&gt; WHERE pilsetas_nosaukums = 'Kuldīga';
+--+-----------+--------+-----+-------------+------------+-----+----+
|id|select_type|table   |type |possible_keys|key         |ref  |rows|
+--+-----------+--------+-----+-------------+------------+-----+----+
| 1|SIMPLE     |pilsetas|const|pils_nos_idx |pils_nos_idx|const|   1|
+--+-----------+--------+-----+-------------+------------+-----+----+</pre>
<p>Savukārt vairāku vērtību nolasīšana no indeksa izskatās šādi. Kā redzams šeit type=range un key palicis tas pats, kā arī parādījusies garum gara Extra kolona, kur parādās vēl divas papildus optimizācijas. Par katru no tām <a href="http://dev.mysql.com/doc/refman/6.0/en/using-explain.html" target="_blank">var lasīt MySQL dokumentācijā</a>.</p>
<pre>mysql&gt; explain SELECT * FROM pilsetas
    -&gt; WHERE pilsetas_nosaukums like 'R%';
+--+-----------+--------+-----+-------------+------------+----+----+
|id|select_type|table   |type |possible_keys|key         |ref |rows|
+--+-----------+--------+-----+-------------+------------+----+----+
| 1|SIMPLE     |pilsetas|range|pils_nos_idx |pils_nos_idx|NULL|   2|
+--+-----------+--------+-----+-------------+------------+----+----+
+-------------------------------+
|Extra                          |
+-------------------------------+
|Using index condition;Using MRR|
+-------------------------------+</pre>
<p>MySQLā diemžēl man neizdodas dabūt nolasītos blokus, jo vienīgais man zināmais <a href="http://datubazes.wordpress.com/2009/02/23/mysql-profiler/" target="_self">rīks MySQL profiler, par ko rakstīju iepriekšējā rakstā</a>, kas to varētu darīt, Windows OSā to nerāda. Taču lielākiem vaicājumiem, kur patiešām ir būtiska atšķirība, Jūs noteikti varat izmantot šo rīku mērījumiem.</p>
<p>Ļoti bieži indeksi tiek uzskatīti par panaceju ar ko atrisināt visas DBVS problēmas - pieliksim kādu klāt un viss būs kārtībā.<br />
<a id="106" title="h6" name="h6"></a></p>
<h3><em>Indeksu posts</em></h3>
<p>Diemžēl, kā katrai lietai, arī indeksiem ir savas ēnas puses. Pati pirmā un galvenā <em>ēna</em> ir indekss <strong>varbūt var uzlabot</strong> <a href="http://datubazes.wordpress.com/2007/12/28/sql-select-i/" target="_self">SELECT</a> vaicājumu ātrdarbību, bet tas <strong>noteikti palēninās</strong> <a href="http://datubazes.wordpress.com/2008/05/10/sql-insert/" target="_self">INSERT</a>, UPDATE, DELETE un <a href="http://datubazes.wordpress.com/2008/06/09/oracle-merge/" target="_self">MERGE</a> ātrdarbību. Parastā tradicionālā kaudzes (<em>heap</em>) tabulā ir vienalga, kur ieraksts nonāk. Indeksā katrai vērtībai ir sava precīza vieta, tāpēc pirmkārt tā ir jāieliek divās vietās, otrkārt var gadīties, ka to vajadzīgajā vietā nevar ielikt, jo tur trūkst vietas un ir jāveic papildus darbības (tātad papildus diska noslodze), lai to varētu izdarīt. Jo vairāk indeksu tabulā būs, jo dārgāk izmaksās to uzturēšana. Tādējādi var pienākt brīdis, kad potenciālais ieguvums SELECT vaicājumos ir mazāks nekā zaudējusm pārējos <a href="http://datubazes.wordpress.com/2007/10/11/dml-ddl-dcl-tcl/" target="_self">datu manipulēšanas vaicājumos</a>.</p>
<p>Tātad liekam jaunu ierakstu klāt (INSERT), mainam viena ieraksta visas kolonas ieskaitot primāro atslēgu (UPDATE) un dzēšam vienu ierakstu (DELETE) un skatamies, kā mainās raksturīgās statistikas. Lai būtu skaidrāk redzama atšķirība, apkopošu rezultātus tabuliņā.</p>
<table border="1">
<tbody>
<tr>
<th>Statistika</th>
<th>bez neviena indeksa</th>
<th>ar 1 indeksu (<em>primary key</em>)</th>
<th>ar 2 indeksiem (PK, nosaukums)</th>
<th>ar 3 indeksiem (PK, nos., iedz. sk.)</th>
</tr>
<tr>
<th colspan="5" align="left">INSERT</th>
</tr>
<tr>
<td><em>db block gets</em></td>
<td>3</td>
<td>5</td>
<td>7</td>
<td>9</td>
</tr>
<tr>
<td><em>consistent gets</em></td>
<td>1</td>
<td>1</td>
<td>1</td>
<td>1</td>
</tr>
<tr>
<td><em>redo size</em></td>
<td>252</td>
<td>508</td>
<td>724</td>
<td>936</td>
</tr>
<tr>
<th colspan="5" align="left">UPDATE</th>
</tr>
<tr>
<td><em>db block gets</em></td>
<td>1</td>
<td>5</td>
<td>9</td>
<td>15</td>
</tr>
<tr>
<td><em>consistent gets</em></td>
<td>16</td>
<td>1</td>
<td>1</td>
<td>1</td>
</tr>
<tr>
<td><em>redo size</em></td>
<td>332</td>
<td>748</td>
<td>1172</td>
<td>1644</td>
</tr>
<tr>
<th colspan="5" align="left">DELETE</th>
</tr>
<tr>
<td><em>db block gets</em></td>
<td>2</td>
<td>4</td>
<td>6</td>
<td>8</td>
</tr>
<tr>
<td><em>consistent gets</em></td>
<td>16</td>
<td>1</td>
<td>1</td>
<td>1</td>
</tr>
<tr>
<td><em>redo size</em></td>
<td>296</td>
<td>500</td>
<td>708</td>
<td>908</td>
</tr>
</tbody>
</table>
<p>Tātad daži secinājumi skatoties uz šiem skaitļiem:</p>
<ul>
<li>Priekš INSERT katra indeksa pielikšana prasa aizvien vairāk lasīt/rakstīt datu blokus (<em>db block gets + consistent gets</em>), 3 indeksu gadījumā tas jau ir vairāk kā 2reiz vairāk nekā bez indeksiem.</li>
<li>Priekš UPDATE un DELETE neviens indekss (jo es dzēsu pēc id lauka) nozīmē tabulas pilnu skanēšanu tāpēc bez neviena indeksa tas prasa vairāk datu bloku lasīšanas.</li>
<li>UPDATE un DELETE pieliekot primāro indeksu ir būtisks lasīšanas samazinājums (<em>consistent gets</em>) , tai pašā laikā rakstīšana (<em>db block gets</em>) aug. Kā redzams UPDATE tas aug sevišķi strauji, jo indeksā vērtības ir nepieciešams dzēst un pēc tam likt atkal klāt.</li>
<li>Ar katru jaunu indeksu aug <em>redo size</em> &#8211; rakstījumi, kas nodrošina atrites (<em>rollback</em>) operāciju. Tas sevišķi uzskatāmi ir UPDATE, jo šeit arī indeksu blokiem ir jānodrošina šīs izmaiņas.</li>
<li>No šīm papildus IO operācijām nav iespējams nekādā citā veidā izbēgt, kā vien, vai nu neveidojot indeksus, vai nerakstot datus tabulā. Tātad galvenais uzdevums ir indeksu skaitu minimizēt un veidot tikai tos, kas patiešām ir nepieciešami. </li>
</ul>
<p><a id="107" title="h7" name="h7"></a></p>
<h3>Kopsavilkums</h3>
<ul>
<li>Indeksi var ļoti būtiski iespaidot ātrdarbību. Diemžēl <strong>abos virzienos</strong> &#8211; gan sliktā, gan labā nozīmē.</li>
<li>Indeksi ir kā zāles, ko nevajag pārdozēt. Pārdozēšana var radīt reālas problēmas.</li>
<li>Šei ir apskatītas tikai ļoti nedaudzas un pašas pamatlietas no indeksu iezīmēm un operācijām. Katrā DBVS vēl var būt burtiski padsmitiem citu.</li>
<li>Atkārtojot savā vidē šeit minētos piemērus, Jums var nākties redzēt citus skaitļus, bet tendencēm gan būtu jābūt tādām kā šeit minēts.</li>
</ul>
<p><a id="108" title="h8" name="h8"></a></p>
<h3>Tālākā lasāmviela</h3>
<ul>
<li><a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/schema.htm#CNCPT811" target="_blank">Pārskats par indeksiem Oracle dokumentācijā</a>;</li>
<li><a href="http://richardfoote.wordpress.com/" target="_blank">Richard Foote blogs</a> (Oracle) &#8211; emuārs, kurā indeksi tiek secēti un iztirzāti visos sīkumos;</li>
<li><a href="http://juliandyke.com/Presentations/Presentations.html" target="_blank">Julian Dyke prezentācijas</a> (Oracle) &#8211; šai gadījumā interesantas varētu būt <em>Index Internals</em> un <em>Bitmap Index Internals</em>;</li>
<li><a href="http://dev.mysql.com/doc/refman/6.0/en/mysql-indexes.html" target="_blank">Kā MySQL lieto indeksus</a> &#8211; no MySQL dokumentācijas;</li>
<li><a href="http://www.odetocode.com/Articles/70.aspx" target="_blank">Ieskats SQL Server indeksos</a>.</li>
</ul>
Posted in MySQL, Oracle, SQL  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/datubazes.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/datubazes.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/datubazes.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/datubazes.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/datubazes.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/datubazes.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/datubazes.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/datubazes.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/datubazes.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/datubazes.wordpress.com/56/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=datubazes.wordpress.com&blog=1883718&post=56&subd=datubazes&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://datubazes.wordpress.com/2009/03/04/indeksi/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Gints</media:title>
		</media:content>

		<media:content url="http://datubazes.files.wordpress.com/2009/02/indeksi4.jpg" medium="image">
			<media:title type="html">Indekss</media:title>
		</media:content>

		<media:content url="http://datubazes.files.wordpress.com/2009/02/indeksi22.jpg" medium="image">
			<media:title type="html">Indekss</media:title>
		</media:content>

		<media:content url="http://datubazes.files.wordpress.com/2009/02/indeksi31.jpg" medium="image">
			<media:title type="html">Index range scan</media:title>
		</media:content>
	</item>
		<item>
		<title>LVOUG pirmā konference</title>
		<link>http://datubazes.wordpress.com/2009/03/02/lvoug-pirma-konference/</link>
		<comments>http://datubazes.wordpress.com/2009/03/02/lvoug-pirma-konference/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 07:05:46 +0000</pubDate>
		<dc:creator>Gints Plivna</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Pasākumi]]></category>

		<guid isPermaLink="false">http://datubazes.wordpress.com/?p=867</guid>
		<description><![CDATA[Jauns gads ar jauniem vietējiem pasākumiem ir klāt. 27. martā (šajā 2009. gadā, protams   ) Latvijas Oracle lietotāju grupa rīko savu pirmo konferenci. Tā sākas pusdienlaikā 13.00 un paralēli notiks 2 sesijās. Konferencē uzstāsies vietējie LVOUG pārstāvji, kas dalīsies pieredzē par dažām Oracle 11g jaunajām iespējām ieskaitot 11g SQL plānu pārvaldību un Database [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=datubazes.wordpress.com&blog=1883718&post=867&subd=datubazes&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Jauns gads ar jauniem vietējiem pasākumiem ir klāt. 27. martā (šajā 2009. gadā, protams <img src='http://s.wordpress.com/wp-includes/images/smilies/face-smile.png' alt=':)' class='wp-smiley' />  ) <a href="http://groups.google.com/group/lvoug" target="_blank">Latvijas Oracle lietotāju grupa</a> rīko savu <strong>pirmo konferenci</strong>. Tā sākas pusdienlaikā 13.00 un paralēli notiks 2 sesijās. Konferencē uzstāsies vietējie LVOUG pārstāvji, kas dalīsies pieredzē par dažām Oracle 11g jaunajām iespējām ieskaitot 11g SQL plānu pārvaldību un Database replay iespēju, vairākas prezentācijas no administratoru skatupunkta, Oracle vs MySQL (kazi varētu būt interesanti ne tikai rūdītiem Oracle faniem) un <a href="http://elietas.wordpress.com/" target="_blank">Raimonda</a> <em>iemīļotais jājamzirdziņš</em> Ruby on Rails. Arī es centīšos dot savu artavu šai lietā ar prezentāciju par SQL teikuma izpildes plānu (<em>execution plan</em>), tā iegūšanu un izpratni, mazdruscīt par biežākājām tajos sastopamajām operācijām, tai skaitā <a href="http://datubazes.wordpress.com/2008/02/11/sql-join-i/" target="_self">savienojumu</a> (<em>join</em>) fiziskajiem izpildīšanas veidiem (<em>nested loops, hash join, merge join</em>) un mazliet par garajām operācijām (<em>long operations</em>).</p>
<p>Papildus pašmāju bāleliņiem (jā kur gan mums ir daiļā dzimuma pārstāves??) būs arī viesis <a href="http://db360.blogspot.com/" target="_blank">Kuassi Mensah</a> no Oracle, kurš uzstāsies ar divām prezentācijām.</p>
<p>Ja nu Tu, lasītāj, skaties un nesaproti, kāpēc Tevis nav <a href="http://groups.google.com/group/lvoug/web/lvoug-konference-27-mart-2" target="_blank">konferences prezentētāju sarakstā</a>, vai arī Tu varētu kaut ko interesantu citiem pastāstīt, tad seko līdzi <a href="http://groups.google.com/group/lvoug/topics?gvc=2" target="_blank">LVOUG grupas e-pasta listei</a> un nākošreiz piesakies! Pie tam vajadzētu atcerēties, ka ne jau tikai hiperjaunās un hipersarežģītās lietas ir vērts stāstīt, Oracle ir pietiekami liela un monstroza, lai atrastu gana interesantas tēmas arī it kā zināmākās lietās un vietās.</p>
<p>Vēl svarīgi zināt - <strong>dalība konferencē ir bezmaksas</strong>, bet <a href="http://lvoug.e-formas.lv/forms/1656" target="_blank">nepieciešams reģistrēties šeit</a>.</p>
<p>Un visbeidzot - konference notiks <a href="http://www.centrumhotels.com/lv/v_monika_apie.php" target="_blank">viesnīcā Monika</a> Elizabetes ielā 21. Tā ir viesnīca uz Elizabetes un Pulkveža Brieža ielas stūra, turpat apakšā ir <a href="http://www.restorans.lv/page.php" target="_blank">restorāns Vincents</a> sevišķajiem gardēžiem <img src='http://s.wordpress.com/wp-includes/images/smilies/face-wink.png' alt=';)' class='wp-smiley' /> </p>
<h3>Saites</h3>
<ul>
<li><a href="http://groups.google.ca/group/lvoug/web/lvoug-konference-27-mart-2" target="_blank">Konferences prezentāciju grafiks</a>;</li>
<li><a href="http://lvoug.e-formas.lv/forms/1656" target="_blank">Reģistrēšanās konferencei</a>;</li>
<li><a href="//maps.google.com/maps?f=q&amp;hl=en&amp;geocode=&amp;q=monika+centrum+hotels,+riga+elizabetes+21&amp;sll=56.960678,24.105785&amp;sspn=0.008552,0.019226&amp;ie=UTF8&amp;ll=56.960514,24.105828&amp;spn=0.008552,0.019226&amp;z=16&amp;iwloc=A',896,680)" target="_blank">Konferences norises vieta</a>.</li>
</ul>
Posted in Oracle, Pasākumi  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/datubazes.wordpress.com/867/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/datubazes.wordpress.com/867/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/datubazes.wordpress.com/867/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/datubazes.wordpress.com/867/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/datubazes.wordpress.com/867/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/datubazes.wordpress.com/867/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/datubazes.wordpress.com/867/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/datubazes.wordpress.com/867/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/datubazes.wordpress.com/867/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/datubazes.wordpress.com/867/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=datubazes.wordpress.com&blog=1883718&post=867&subd=datubazes&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://datubazes.wordpress.com/2009/03/02/lvoug-pirma-konference/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Gints</media:title>
		</media:content>
	</item>
		<item>
		<title>MySQL profiler</title>
		<link>http://datubazes.wordpress.com/2009/02/23/mysql-profiler/</link>
		<comments>http://datubazes.wordpress.com/2009/02/23/mysql-profiler/#comments</comments>
		<pubDate>Mon, 23 Feb 2009 07:00:11 +0000</pubDate>
		<dc:creator>Gints Plivna</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Ātrdarbība]]></category>

		<guid isPermaLink="false">http://datubazes.wordpress.com/?p=815</guid>
		<description><![CDATA[Es ik pa laikam iedomājos vai MySQLā arī var lietot līdzīgas iespējas, kā piemēram Oracle autotrace, lai varētu mērīt izpildes laiku, paveiktos soļus un kaut kādu statistiku vaicājumiem, un lai salīdzinātu, kas tad izpildījās ātrāk un kāpēc. Tad nu izrādās, ka jau vismaz kopš 2007. gada pavasara eksistē tāda lieta, kā MySQL profiler, kas lielā [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=datubazes.wordpress.com&blog=1883718&post=815&subd=datubazes&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Es ik pa laikam iedomājos vai MySQLā arī var lietot līdzīgas iespējas, kā piemēram <a href="http://datubazes.wordpress.com/2008/01/30/sqlplus-autotrace/" target="_self">Oracle autotrace</a>, lai varētu mērīt izpildes laiku, paveiktos soļus un kaut kādu statistiku vaicājumiem, un lai salīdzinātu, kas tad izpildījās ātrāk un kāpēc. Tad nu izrādās, ka jau vismaz kopš 2007. gada pavasara eksistē tāda lieta, kā <strong><a href="http://dev.mysql.com/doc/refman/5.0/en/show-profiles.html" target="_blank">MySQL profiler</a></strong>, kas lielā mērā to nodrošina. Jau pašā sākumā jābrīdina, ka MySQL ir visai dīvaina DBVS un visai dīvainas izstrādes metodes vismaz no mana skatupunkta, jo pirmkārt MySQL Profiler nav pieejams MySQL Enterprise Server un notiek arī tāda mistiska dīvainība, ka vecākās versijās ir, bet jaunākās nē, piemēram, 5.0.37 ir, bet 6.0.4 nav (uz to arī es uzrāvos un brīnījos kā gan tas nākas), savukārt pēdējā novelkamajā 6.0.9. alpha atkal ir. Tā kā iespējams ne visiem lietotājiem būs tā iespēja šo rīku arī izmantot. Vēl tāds interesants fakts, ka šajā brīdī meklējot Googlē MySQL profiler latviskās lapās (tas ir pirms šī raksta, ko pašlaik lasat, publicēšanas) tiek atrasti 17 rezultāti, no kuriem tieši 1 ir kādā sakarā ar meklēto frāzi.<br />
<a id="100" title="h1" name="h1"></a></p>
<h3>Kā jālieto?</h3>
<p>Profiler sākšana un beigšana ir ļoti vienkārša. Lai sāktu, rakstam:</p>
<pre>mysql&gt; set profiling=1;
Query OK, 0 rows affected (0.00 sec)</pre>
<p>Lai beigtu, rakstam:</p>
<pre>mysql&gt; set profiling=0;
Query OK, 0 rows affected (0.00 sec)</pre>
<p>Lai noskaidrotu, kādā stāvoklī esam:</p>
<pre>mysql&gt; select @@profiling;
+-------------+
| @@profiling |
+-------------+
|           0 |
+-------------+
1 row in set (0.00 sec)</pre>
<p><a id="101" title="h2" name="h2"></a></p>
<h3>Ko ar to var redzēt?</h3>
<p><span id="more-815"></span>Apsolījumi ir, ka ar to var redzēt daudz un dažādas lietas ieskaitot kopējo patērēto laiku, procesora laiku, lasītos un rakstītos blokus u.c. lietas. Visuzskatāmāk to var redzēt paskatoties, ko tad glabā information_schema shēmas tabula profiling, kur tiek glabāta profilēšanas informācija.</p>
<pre>mysql&gt; desc information_schema.profiling;
+---------------------+--------------+------+
| Field               | Type         | Null |
+---------------------+--------------+------+
| QUERY_ID            | int(20)      | NO   |
| SEQ                 | int(20)      | NO   |
| STATE               | varchar(30)  | NO   |
| DURATION            | decimal(9,6) | NO   |
| CPU_USER            | decimal(9,6) | YES  |
| CPU_SYSTEM          | decimal(9,6) | YES  |
| CONTEXT_VOLUNTARY   | int(20)      | YES  |
| CONTEXT_INVOLUNTARY | int(20)      | YES  |
| BLOCK_OPS_IN        | int(20)      | YES  |
| BLOCK_OPS_OUT       | int(20)      | YES  |
| MESSAGES_SENT       | int(20)      | YES  |
| MESSAGES_RECEIVED   | int(20)      | YES  |
| PAGE_FAULTS_MAJOR   | int(20)      | YES  |
| PAGE_FAULTS_MINOR   | int(20)      | YES  |
| SWAPS               | int(20)      | YES  |
| SOURCE_FUNCTION     | varchar(30)  | YES  |
| SOURCE_FILE         | varchar(20)  | YES  |
| SOURCE_LINE         | int(20)      | YES  |
+---------------------+--------------+------+</pre>
<p>Diemžēl arī statistiku ziņā rīks ir nepilnīgs, jo kā rakstīts arī dokumentācijā, ne visur visu var dabūt. Un MySQL uz Windows (ko es arī testēju) noteikti nerāda visu, pareizāk izsakoties rāda statusu (nosacītu vaicājuma izpildes stāvokli), laiku, izejas failu un izejas koda rindiņu. Jāatzīst, ka iesākumam arī tas nav slikti, jo:</p>
<ul>
<li>laiks tiek fiksēts ar precizitāti līdz mikrosekundēm (6 zīmes aiz komata), kas ir krietni labāk nekā noklusētās centisekundes (ko rāda pēc katra izpildītā vaicājuma);</li>
<li>skatoties uz stāvokļiem rodas lielāka skaidrība, kādas operācijas vaicājuma izpildes gaitā tiek veiktas, cik tās tiek veiktas un cik laiku katra prasa.</li>
</ul>
<p>Tātad apskatīsim 2 piemērus, kas balstīti uz tabulām ierakstā par <a href="http://datubazes.wordpress.com/2009/01/08/in-un-exists-salidzinasanas-operatori/#p0" target="_self">IN un EXISTS apakšvaicājumiem</a>. Pirmais piemērs būs izmantojot IN operatoru, otrais EXISTS, bet to rezultāti ir identiski. Redzēsim, kā apskatīties profilus visus kopā un kā sīkāk katru atsevišķi.</p>
<pre>mysql&gt; SELECT * FROM b
    -&gt; WHERE y1 IN (
    -&gt;   SELECT x1
    -&gt;   FROM a);
+------+------+------+
| y1   | y2   | y3   |
+------+------+------+
|    1 |    1 |    1 |
|    1 |    2 |    1 |
|    2 |    2 |    3 |
+------+------+------+
3 rows in set (0.00 sec)
mysql&gt; SELECT * FROM b
    -&gt; WHERE EXISTS (
    -&gt;   SELECT 1
    -&gt;   FROM a
    -&gt;   WHERE a.x1 = b.y1);
+------+------+------+
| y1   | y2   | y3   |
+------+------+------+
|    1 |    1 |    1 |
|    1 |    2 |    1 |
|    2 |    2 |    3 |
+------+------+------+
3 rows in set (0.01 sec)</pre>
<p>It kā otrais mums ir izpildījies ilgāk, skatamies kā tad tas ir saskaņā ar profiler datiem. Lai to darītu jāraksta SHOW PROFILE<strong>S</strong>, daudzskaitlī. Man jau ir izpildītii vairāki vaicājumi, tāpēc šie ir ar lielākiem numuriem (46 un 47):</p>
<pre>mysql&gt; show profiles;
+----------+------------+-----------------------------------
| Query_ID | Duration   | Query
+----------+------------+-----------------------------------
|       <strong>46</strong> | 0.00092950 | SELECT * FROM b
WHERE y1 IN (
  SELECT x1
  FROM a)                     |
|       <strong>47</strong> | 0.00084825 | SELECT * FROM b
WHERE EXISTS (
  SELECT 1
  FROM a
  WHERE a.x1 = b.y1) |
+----------+------------+-----------------------------------</pre>
<p>Interesanti, ka saskaņā ar profiling info, vaicājums ar EXISTS ir pat izpildījies ātrāk nekā ar IN un kas pats interesantākais neviens no tiem nav tuvu centisekundei. Jādomā, ka tas saistīts ar kaut kādām noapaļošanas kļūdām un pārāk maziem skaitļiem, lai būtu precīzi mērījumi <img src='http://s.wordpress.com/wp-includes/images/smilies/face-smile.png' alt=':)' class='wp-smiley' /> </p>
<p>Tagad nāk interesantākā daļa, skatamies, kāds tad izskatās katrs atsevišķais profails. Tam izmantojam komandu SHOW PROFILE, vienskaitlī. Komandai pieliekot klāt argumentu iegūstam profailu iepriekš izpildītam vaicājumam ar numuru X.</p>
<p>Tātad vaicājuma ar IN operatoru profails izskatās šādi:</p>
<pre>mysql&gt; show profile for query 46;
+--------------------------------+----------+
| Status                         | Duration |
+--------------------------------+----------+
| starting                       | 0.000025 |
| checking query cache for query | 0.000101 |
| Opening tables                 | 0.000033 |
| System lock                    | 0.000007 |
| Table lock                     | 0.000064 |
| init                           | 0.000056 |
| optimizing                     | 0.000021 |
| statistics                     | 0.000028 |
| preparing                      | 0.000162 |
| executing                      | 0.000006 |
| Sending data                   | 0.000209 |
| end                            | 0.000006 |
| removing tmp table             | 0.000023 |
| end                            | 0.000006 |
| query end                      | 0.000005 |
| freeing items                  | 0.000146 |
| storing result in query cache  | 0.000024 |
| logging slow query             | 0.000003 |
| cleaning up                    | 0.000009 |
+--------------------------------+----------+</pre>
<p>Tātad skatoties uz šo var izdarīt vairākus secinājumus:</p>
<ul>
<li>kura operācija aizņem visvairāk laiku;</li>
<li>rodas priekšstats par to, ko tad serveris vaicājuma izpildes gaitā vispār dara;</li>
<li>redzam, ka šis apakšvaicājums ir prasījis pagaidu tabulas izveidi (jo ir solis <em>removing tmp table</em>), tas būs interesanti saistībā ar otru vaicājumu.</li>
</ul>
<p>Tagad profails ar EXISTS apakšvaicājumu:</p>
<pre>mysql&gt; show profile for query 47;
+--------------------------------+----------+
| Status                         | Duration |
+--------------------------------+----------+
| starting                       | 0.000025 |
| checking query cache for query | 0.000111 |
| Opening tables                 | 0.000034 |
| System lock                    | 0.000006 |
| Table lock                     | 0.000062 |
| init                           | 0.000049 |
| optimizing                     | 0.000009 |
| statistics                     | 0.000022 |
| preparing                      | 0.000016 |
| executing                      | 0.000005 |
| Sending data                   | 0.000054 |
| optimizing                     | 0.000015 |
| statistics                     | 0.000018 |
| preparing                      | 0.000013 |
| executing                      | 0.000004 |
| Sending data                   | 0.000049 |
| executing                      | 0.000004 |
| Sending data                   | 0.000024 |
| executing                      | 0.000003 |
| Sending data                   | 0.000019 |
| executing                      | 0.000004 |
| Sending data                   | 0.000022 |
| executing                      | 0.000003 |
| Sending data                   | 0.000019 |
| executing                      | 0.000003 |
| Sending data                   | 0.000072 |
| end                            | 0.000013 |
| query end                      | 0.000004 |
| freeing items                  | 0.000139 |
| storing result in query cache  | 0.000022 |
| logging slow query             | 0.000003 |
| cleaning up                    | 0.000009 |
+--------------------------------+----------+</pre>
<p>Ko redzam šeit:</p>
<ul>
<li>atšķirībā no IN šeit nav pagaidu tabulas dzēšana;</li>
<li>ir 2 sekvences <em>optimizing, statistics, preparing, executing, Sending data</em> un pēc tam 5 sekvences <em>executing, Sending data</em>. Tas izskatās pēc 2 vaicājumu optimizēšanas &#8211; pirmā virsvaicājumam un otrā apakšvaicājumam un pēc tam vēl 5 reizes ierakstu nolasīšanas. Ja paskatamies izpildes plānā, tad arī tā izskatās, taču, protams, neņemos teoretizēt kādā kārtībā kādi ieraksti tika tur lasīti <img src='http://s.wordpress.com/wp-includes/images/smilies/face-smile.png' alt=':)' class='wp-smiley' /> </li>
</ul>
<p>Tālāk paskatamies vēl dažas interesantas lietas &#8211; palaižam vaicājumu ar EXISTS vēlreiz. Tagad pēc show profiles var redzēt, ka otrajā reizē tieši tas pats vaicājums ir izpildījies ~6 reizes ātrāk nekā pirmajā un ir palikušas tikai dažas operācijas:</p>
<pre>mysql&gt; show profiles;
+----------+------------+-----------------------------------
| Query_ID | Duration   | Query
+----------+------------+-----------------------------------
|       49 | 0.00014200 | SELECT * FROM b
WHERE EXISTS (
  SELECT 1
  FROM a
  WHERE a.x1 = b.y1)         |
+----------+------------+--------------------
mysql&gt; show profile for query 49;
+--------------------------------+----------+
| Status                         | Duration |
+--------------------------------+----------+
| starting                       | 0.000025 |
| checking query cache for query | 0.000009 |
| checking privileges on cached  | 0.000011 |
| sending cached result to clien | 0.000089 |
| logging slow query             | 0.000004 |
| cleaning up                    | 0.000003 |
+--------------------------------+----------+</pre>
<p>Pēc visām šīm operācijām ir acīmredzami, ka tiek izmantots iekešotais rezultāts un kā tas iespaido gan operāciju skaitu, gan kopējo vaicājuma izpildes ātrumu.<br />
<a id="102" title="h3" name="h3"></a></p>
<h3>Dažas papildus lietas, ko atcerēties</h3>
<ul>
<li>Profilēšana strādā arī citiem sql teikumiem, ne tikai select vaicājumiem.</li>
<li>Ļoti nepatīkami, ka uz Windows nerāda BLOCKS IO, jo tā noteikti varētu būt nākošā interesantākā statistika pēc izpildes laika.</li>
<li>Ir tiešām vērts izpētīt izpildāmās operācijas, pie ORDER BY, piemēram, parādās <em>Sorting result</em> un tai atbilstošais laiks, kas ļoti uzskatāmi parāda, ko nozīmē ORDER BY pievienošana. Savukārt GROUP BY parādās gan <em>Sorting result</em>, gan arī pirms tam <em>Creating tmp table</em>, kas parāda kā MySQL veic šīs operācijas.</li>
<li>Ilgi izpildošamies vaicājumiem varētu būt ļoti daudzas operācijas un tad vienkārša komanda show profile varētu dot ļoti nepārskatām rezultātu. Tad ir vērts atcerēties par information_schema.profiling tabulu, kuras rezultātus ar tiem pašiem SELECT vaicājumiem un grupēšanu pēc operācijas var padarīt krietni lasāmākus. </li>
</ul>
<p><a id="103" title="h4" name="h4"></a></p>
<h3>Tālākā lasāmviela</h3>
<ul>
<li><a href="http://dev.mysql.com/tech-resources/articles/using-new-query-profiler.html" target="_blank">Using the New MySQL Query Profiler</a> - apraksts par MySQL profiler ar piemēriem, kā to izmantot.</li>
<li><a href="http://dev.mysql.com/doc/refman/5.0/en/show-profiles.html" target="_blank">SHOW PROFILES sintakse MySQL 5.0 dokumentācijā</a>.</li>
</ul>
Posted in MySQL, Ātrdarbība  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/datubazes.wordpress.com/815/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/datubazes.wordpress.com/815/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/datubazes.wordpress.com/815/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/datubazes.wordpress.com/815/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/datubazes.wordpress.com/815/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/datubazes.wordpress.com/815/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/datubazes.wordpress.com/815/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/datubazes.wordpress.com/815/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/datubazes.wordpress.com/815/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/datubazes.wordpress.com/815/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=datubazes.wordpress.com&blog=1883718&post=815&subd=datubazes&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://datubazes.wordpress.com/2009/02/23/mysql-profiler/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Gints</media:title>
		</media:content>
	</item>
	</channel>
</rss>