[ZF-10089] Zend_Log
[zend.git] / documentation / manual / nl / module_specs / Zend_Db_Profiler.xml
blobea5c9f5c184613dd91236aeac19b4a2198e0e350
1 <sect1 id="zend.db.profiler">
3     <title>Zend_Db_Profiler</title>
5     <sect2 id="zend.db.profiler.introduction">
7         <title>Inleiding</title>
9         <para>
10             <code>Zend_Db_Profiler</code> kan worden geactiveerd om queries te profileren.
11             Profielen bevatten de door de adapter uitgevoerde queries evenals de tijd die
12             nodig was om de queries uit te voeren. Dit laat inspectie van de uitgevoerde
13             queries toe zonder bijkomende debug code aan de klassen toe te voegen.
14             Geavanceerd gebruik laat de ontwikkelaar filteren welke queries geprofileerd worden.
15         </para>
17         <para>
18             Activeren van de profiler kan op twee wijzen gebeuren: een directive aan de
19             adapter constructor doorgeven, of door de adapter te vragen het later te
20             activeren.
21         </para>
23         <programlisting role="php"><![CDATA[<?php
24 require_once 'Zend/Db.php';
26 $params = array (
27     'host'     => '127.0.0.1',
28     'username' => 'arthur',
29     'password' => '******',
30     'dbname'   => 'camelot',
31     'profiler' => true  // profiler activeren; naar false zetten om te de-activeren (standaard)
34 $db = Zend_Db::factory('PDO_MYSQL', $params);
36 // profiler de-activeren:
37 $db->getProfiler()->setEnabled(false);
39 // profiler activeren:
40 $db->getProfiler()->setEnabled(true);
41 ?>]]></programlisting>
42     </sect2>
44     <sect2 id="zend.db.profiler.using">
46         <title>De Profiler Gebruiken</title>
48         <para>
49             De profiler kan op eender welk moment worden aangeroepen
50             via de <code>getProfiler()</code> methode van de adapter:
51         </para>
53         <programlisting role="php"><![CDATA[<?php
54 $profiler = $db->getProfiler();
55 ?>]]></programlisting>
57         <para>
58             Dit geeft een objectinstantie van <code>Zend_Db_Profiler</code> terug.
59             Met deze instantie kan de ontwikkelaar je queries inspecteren via
60             verscheidene methodes:
61         </para>
63         <itemizedlist>
64             <listitem>
65               <para>
66                 <code>getTotalNumQueries()</code> geeft het totaal aantal
67                 queries weer die werden geprofileerd.
68               </para>
69             </listitem>
70             <listitem>
71               <para>
72                 <code>getTotalElapsedSecs()</code> geeft het totaal aantal
73                 seconden weer die nodig waren om alle queries uit te voeren.
74               </para>
75             </listitem>
76             <listitem>
77               <para>
78                 <code>getQueryProfiles()</code> geeft een array van alle query
79                 profielen weer.
80               </para>
81             </listitem>
82             <listitem>
83               <para>
84                 <code>getLastQueryProfile()</code> geeft het laatste (meest recente)
85                 query profiel weer, ongeacht of de query volledig uitgevoerd is (indien niet, zal
86                 de eindtijd null zijn)
87               </para>
88             </listitem>
89             <listitem>
90               <para>
91                 <code>clear()</code> vaagt alle query profielen van de lijst weg.
92               </para>
93             </listitem>
94         </itemizedlist>
96         <para>
97             De teruggegeven waarde van <code>getLastQueryProfile()</code> en de individuele
98             elementen van <code>getQueryProfiles()</code> zijn <code>Zend_Db_Profiler_Query</code>
99             objecten die je de mogelijkheid geven om de individuele queries zelf te inspecteren:
100         </para>
102         <itemizedlist>
103             <listitem>
104               <para>
105                 <code>getQuery()</code> geeft de SQL tekst van de query terug.
106               </para>
107             </listitem>
108             <listitem>
109               <para>
110                 <code>getElapsedSecs()</code> geeft het aantal seconden terug die de query
111                 nam om uitgevoerd te worden.
112               </para>
113             </listitem>
114         </itemizedlist>
116         <para>
117             De informatie die <code>Zend_Db_Profiler</code> verstrekt is handig voor het profileren
118             van opstoppers in programma's en voor het debuggen van gebruikte queries. Bijvoorbeeld,
119             om de exacte laatst uitgevoerde query te zien:
120         </para>
122         <programlisting role="php"><![CDATA[<?php
123 $query = $profiler->getLastQueryProfile();
125 echo $query->getQuery();
126 ?>]]></programlisting>
128         <para>
129             Misschien doet een pagina er lang over om afgebeeld te worden; gebruik dan de profiler
130             om eerst het totaal aantal seconden van alle queries te verkrijgen, en dan de queries één
131             voor één te doorlopen om uit te vinden welke het langste duurde:
132         </para>
134         <programlisting role="php"><![CDATA[<?php
135 $totalTime    = $profiler->getTotalElapsedSecs();
136 $queryCount   = $profiler->getTotalNumQueries();
137 $longestTime  = 0;
138 $longestQuery = null;
140 foreach ($profiler->getQueryProfiles() as $query) {
141     if ($query->getElapsedSecs() > $longestTime) {
142         $longestTime  = $query->getElapsedSecs();
143         $longestQuery = $query->getQuery();
144     }
147 echo $queryCount . ' queries uitgevoerd in ' . $totalTime . ' seconden' . "\n";
148 echo 'Gemiddelde query tijd: ' . $totalTime / $queryCount . ' seconden' . "\n";
149 echo 'Queries per seconde: ' . $queryCount / $totalTime . "\n";
150 echo 'Langste query tijd: ' . $longestTime . "\n";
151 echo "Langste query: \n" . $longestQuery . "\n";
152 ?>]]></programlisting>
154     </sect2>
156     <sect2 id="zend.db.profiler.advanced">
158         <title>Geavanceerd Profiler Gebruik</title>
160         <para>
161             Bovenop query inspectie staat de profiler je ook toe de queries die worden
162             geprofileerd te filteren. De volgende methodes kunnen op een
163             <code>Zend_Db_Profiler</code> instantie worden uitgevoerd:
164         </para>
166         <sect3 id="zend.db.profiler.advanced.filtertime">
167             <title>Filteren op afgelopen tijd</title>
169             <para>
170                 <code>setFilterElapsedSecs()</code> laat je toe om een minimum
171                 query tijd te definiëren voordat een query wordt geprofileerd.
172                 Geef een null tijd aan de methode door om de filter te verwijderen.
173             </para>
175             <programlisting role="php"><![CDATA[<?php
176 // Profileer alleen queries die langer dan 5 seconden duren:
177 $profiler->setFilterElapsedSecs(5);
179 // Profileer alle queries ongeacht de uitvoeringstijd:
180 $profiler->setFilterElapsedSecs(null);
181 ?>]]></programlisting>
182         </sect3>
184         <sect3 id="zend.db.profiler.advanced.filtertype">
185             <title>Filteren per type query</title>
187             <para>
188                 <code>setFilterQueryType()</code> laat je toe welk type queries moeten worden
189                 geprofileerd; om meerdere types te profileren geef je ze met een logische OR
190                 door. Query types zijn als de volgende <code>Zend_Db_Profiler</code> constanten
191                 gedefinieerd:
192             </para>
194             <itemizedlist>
195                 <listitem>
196                   <para>
197                     <code>Zend_Db_Profiler::CONNECT</code>: verbindingsoperaties, of het
198                     selecteren van een database.
199                   </para>
200                 </listitem>
201                 <listitem>
202                   <para>
203                     <code>Zend_Db_Profiler::QUERY</code>: standaard database queries die
204                     met geen ander type query overeenkomen.
205                   </para>
206                 </listitem>
207                 <listitem>
208                   <para>
209                     <code>Zend_Db_Profiler::INSERT</code>: eender welke query die data
210                     aan de database toevoegt, meestal SQL INSERT.
211                   </para>
212                 </listitem>
213                 <listitem>
214                   <para>
215                     <code>Zend_Db_Profiler::UPDATE</code>: eender welke query die bestaande
216                     data wijzigt, meestal SQL UPDATE.
217                   </para>
218                 </listitem>
219                 <listitem>
220                   <para>
221                     <code>Zend_Db_Profiler::DELETE</code>: eender welke query die bestaande
222                     data verwijdert, meestal SQL DELETE.
223                   </para>
224                 </listitem>
225                 <listitem>
226                   <para>
227                     <code>Zend_Db_Profiler::SELECT</code>: eender welke query die bestaande
228                     data opvraagt, meestal SQL SELECT.
229                   </para>
230                 </listitem>
231                 <listitem>
232                   <para>
233                     <code>Zend_Db_Profiler::TRANSACTION</code>: eender welke transactionele
234                     operatie, zoals een transactie starten, bevestigen (commit) of annuleren
235                     (rollback).
236                   </para>
237                 </listitem>
238             </itemizedlist>
240             <para>
241                 Zoals bij <code>setFilterElapsedSecs()</code> kan je elke bestaande filter verwijderen
242                 door <code>null</code> als enig argument door te geven.
243             </para>
245             <programlisting role="php"><![CDATA[<?php
246 // profileer enkel SELECT queries
247 $profiler->setFilterQueryType(Zend_Db_Profiler::SELECT);
249 // profileer SELECT, INSERT, en UPDATE queries
250 $profiler->setFilterQueryType(Zend_Db_Profiler::SELECT | Zend_Db_Profiler::INSERT | Zend_Db_Profiler::UPDATE);
252 // profileer DELETE queries (zodat we kunnnen uitvissen waarom data maar blijft verdwijnen)
253 $profiler->setFilterQueryType(Zend_Db_Profiler::DELETE);
255 // Alle filters verwijderen
256 $profiler->setFilterQueryType(null);
257 ?>]]></programlisting>
259         </sect3>
261         <sect3 id="zend.db.profiler.advanced.getbytype">
262             <title>Profielen per type query verkrijgen</title>
264             <para>
265                 Het gebruik van <code>setFilterQueryType()</code> kan het aantal gegenereerde profielen
266                 beperken. Soms is het echter handiger om alle profielen te behouden, maar enkel die te
267                 bekijken die je op dat moment nodig hebt. Een andere eigenschap van <code>getQueryProfiles()</code>
268                 is dat het kan filteren terwijl de code loopt, door het een type query (of een logische
269                 combinatie van querytypes) als eerste argument door te geven; zie
270                 <xref linkend="zend.db.profiler.advanced.filtertype" /> voor een lijst van de querytype
271                 constanten.
272             </para>
274             <programlisting role="php"><![CDATA[<?php
275 // Alleen SELECT query profielen verkrijgen
276 $profiles = $profiler->getQueryProfiles(Zend_Db_Profiler::SELECT);
278 // Alleen SELECT, INSERT, en UPDATE query profielen verkrijgen
279 $profiles = $profiler->getQueryProfiles(Zend_Db_Profiler::SELECT | Zend_Db_Profiler::INSERT | Zend_Db_Profiler::UPDATE);
281 // Alleen DELETE query profielen verkrijgen (zodat we kunnen nagaan waarom data maar blijft verdwijnen)
282 $profiles = $profiler->getQueryProfiles(Zend_Db_Profiler::DELETE);
283 ?>]]></programlisting>
285         </sect3>
287     </sect2>
289 </sect1>
290 <!--
291 vim:se ts=4 sw=4 et: