<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>OpenText Analytics Database 26.2.x – Profiling database performance</title>
    <link>/en/admin/profiling-db-performance/</link>
    <description>Recent content in Profiling database performance on OpenText Analytics Database 26.2.x</description>
    <generator>Hugo -- gohugo.io</generator>
    
	  <atom:link href="/en/admin/profiling-db-performance/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>Admin: Enabling profiling</title>
      <link>/en/admin/profiling-db-performance/enabling-profiling/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/en/admin/profiling-db-performance/enabling-profiling/</guid>
      <description>
        
        
        &lt;p&gt;You can enable profiling at three scopes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;#Global&#34;&gt;Globally across all database sessions&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;#Session&#34;&gt;The current session&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;#Statemen&#34;&gt;Individual SQL statements&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The meta-function 
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/functions/performance-analysis-functions/profiling-functions/show-profiling-config/#&#34;&gt;SHOW_PROFILING_CONFIG&lt;/a&gt;&lt;/code&gt; shows if profiling is enabled at global and session scopes. In the following example, the function shows that profiling is disabled across all categories for the current session, and enabled globally across all categories:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;=&amp;gt; SELECT SHOW_PROFILING_CONFIG();
SHOW_PROFILING_CONFIG
------------------------------------------
 Session Profiling: Session off, Global on
 EE Profiling:      Session off, Global on
 Query Profiling:   Session off, Global on
(1 row)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a name=&#34;Global&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;global-profiling&#34;&gt;Global profiling&lt;/h2&gt;
&lt;p&gt;When global profiling is enabled or disabled for a given category, that setting persists across all database sessions. You set global profiling with 
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/statements/alter-statements/alter-db/#&#34;&gt;ALTER DATABASE&lt;/a&gt;&lt;/code&gt;, as follows:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ALTER DATABASE &lt;span class=&#34;code-variable&#34;&gt;db-spec&lt;/span&gt; SET &lt;span class=&#34;code-variable&#34;&gt;profiling-category&lt;/span&gt; = {0 | 1}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;&lt;code&gt;profiling-category&lt;/code&gt;&lt;/em&gt; specifies a profiling category with one of the following arguments:

&lt;table class=&#34;table table-bordered&#34; &gt;



&lt;tr&gt; 

&lt;th &gt;
Argument&lt;/th&gt; 

&lt;th &gt;
Data profiled&lt;/th&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;GlobalQueryProfiling&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;






&lt;p&gt;Query-specific information, such as query string and duration of execution, divided between two system tables:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;../../../en/sql-reference/system-tables/v-monitor-schema/query-plan-profiles/#&#34;&gt;QUERY_PLAN_PROFILES&lt;/a&gt;: Real-time status for each query plan path.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;../../../en/sql-reference/system-tables/v-monitor-schema/query-profiles/#&#34;&gt;QUERY_PROFILES&lt;/a&gt;: Query information.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;GlobalSessionProfiling&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;

General information about query execution on each node during the current session, stored in system table
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/system-tables/v-monitor-schema/session-profiles/#&#34;&gt;SESSION_PROFILES&lt;/a&gt;&lt;/code&gt;.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;GlobalEEProfiling&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;


Execution engine data, saved in system tables
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/system-tables/v-monitor-schema/query-consumption/#&#34;&gt;QUERY_CONSUMPTION&lt;/a&gt;&lt;/code&gt; and
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/system-tables/v-monitor-schema/execution-engine-profiles/#&#34;&gt;EXECUTION_ENGINE_PROFILES&lt;/a&gt;&lt;/code&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;For example, the following statement globally enables query profiling on the current (&lt;code&gt;DEFAULT&lt;/code&gt;) database:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;=&amp;gt; ALTER DATABASE DEFAULT SET GlobalQueryProfiling = 1;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a name=&#34;Session&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;session-profiling&#34;&gt;Session profiling&lt;/h2&gt;
&lt;p&gt;Session profiling can be enabled for the current session, and persists until you explicitly disable profiling, or the session ends. You set session profiling with the following meta-functions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/functions/performance-analysis-functions/profiling-functions/enable-profiling/#&#34;&gt;ENABLE_PROFILING&lt;/a&gt; ( &lt;span class=&#34;code-variable&#34;&gt;profiling-type&lt;/span&gt; )&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/functions/performance-analysis-functions/profiling-functions/disable-profiling/#&#34;&gt;DISABLE_PROFILING&lt;/a&gt; ( &lt;span class=&#34;code-variable&#34;&gt;profiling-type&lt;/span&gt; )&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;&lt;code&gt;profiling-type&lt;/code&gt;&lt;/em&gt; specifies type of profiling data to enable or disable with one of the following arguments:

&lt;table class=&#34;table table-bordered&#34; &gt;



&lt;tr&gt; 

&lt;th &gt;
Argument&lt;/th&gt; 

&lt;th &gt;
Data profiled&lt;/th&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;query&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;






&lt;p&gt;Query-specific information, such as query string and duration of execution, divided between two system tables:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;../../../en/sql-reference/system-tables/v-monitor-schema/query-plan-profiles/#&#34;&gt;QUERY_PLAN_PROFILES&lt;/a&gt;: Real-time status for each query plan path.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;../../../en/sql-reference/system-tables/v-monitor-schema/query-profiles/#&#34;&gt;QUERY_PROFILES&lt;/a&gt;: Query information.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;session&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;

General information about query execution on each node during the current session, stored in system table
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/system-tables/v-monitor-schema/session-profiles/#&#34;&gt;SESSION_PROFILES&lt;/a&gt;&lt;/code&gt;.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;ee&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;


Execution engine data, saved in system tables
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/system-tables/v-monitor-schema/query-consumption/#&#34;&gt;QUERY_CONSUMPTION&lt;/a&gt;&lt;/code&gt; and
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/system-tables/v-monitor-schema/execution-engine-profiles/#&#34;&gt;EXECUTION_ENGINE_PROFILES&lt;/a&gt;&lt;/code&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;For example, the following statement enables session-scoped profiling for the execution run of each query:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;=&amp;gt; SELECT ENABLE_PROFILING(&amp;#39;ee&amp;#39;);
   ENABLE_PROFILING
----------------------
 EE Profiling Enabled
(1 row)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a name=&#34;Statemen&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;statement-profiling&#34;&gt;Statement profiling&lt;/h2&gt;
&lt;p&gt;You can enable profiling for individual SQL statements by prefixing them with the keyword 
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/statements/profile/#&#34;&gt;PROFILE&lt;/a&gt;&lt;/code&gt;. You can profile a &lt;code&gt;SELECT&lt;/code&gt; statement, or any DML statement such as 
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/statements/insert/#&#34;&gt;INSERT&lt;/a&gt;&lt;/code&gt;, 
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/statements/update/#&#34;&gt;UPDATE&lt;/a&gt;&lt;/code&gt;, 
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/statements/copy/#&#34;&gt;COPY&lt;/a&gt;&lt;/code&gt;, and 
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/statements/merge/#&#34;&gt;MERGE&lt;/a&gt;&lt;/code&gt;. For detailed information, see &lt;a href=&#34;../../../en/admin/profiling-db-performance/profiling-single-statements/#&#34;&gt;Profiling single statements&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;precedence-of-profiling-scopes&#34;&gt;Precedence of profiling scopes&lt;/h2&gt;
&lt;p&gt;OpenText™ Analytics Database checks session and query profiling at the following scopes in descending order of precedence:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Statement profiling (highest)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sesssion profiling (ignored if global profiling is enabled)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Global profiling (lowest)&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Regardless of query and session profiling settings, the database always saves a minimum amount of profiling data in the pertinent system tables: &lt;code&gt;QUERY_PROFILES&lt;/code&gt;, &lt;code&gt;QUERY_PLAN_PROFILES&lt;/code&gt;, and &lt;code&gt;SESSION_PROFILES&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For execution engine profiling, the database first checks the setting of configuration parameter &lt;code&gt;SaveDCEEProfileThresholdUS&lt;/code&gt;. If the query runs longer than the specified threshold (by default, 60 seconds), the database gathers execution engine data for that query and saves it to system tables 
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/system-tables/v-monitor-schema/query-consumption/#&#34;&gt;QUERY_CONSUMPTION&lt;/a&gt;&lt;/code&gt; and 
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/system-tables/v-monitor-schema/execution-engine-profiles/#&#34;&gt;EXECUTION_ENGINE_PROFILES&lt;/a&gt;&lt;/code&gt;. The database uses profiling settings of other scopes (statement, session, global) only if the query&#39;s duration is below the threshold.

&lt;div class=&#34;admonition important&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;admonition-head&#34;&gt;Important&lt;/h4&gt;
&lt;p&gt;To disable or minimize execution engine profiling:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Set &lt;code&gt;SaveDCEEProfileThresholdUS&lt;/code&gt; to a very high value, up to its maximum value of 2147483647 (2&lt;sup&gt;31&lt;/sup&gt;-1, or ~35.79 minutes).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Disable profiling at session and global scopes.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Admin: Profiling single statements</title>
      <link>/en/admin/profiling-db-performance/profiling-single-statements/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/en/admin/profiling-db-performance/profiling-single-statements/</guid>
      <description>
        
        
        &lt;p&gt;To profile a single statement, prefix it with 
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/statements/profile/#&#34;&gt;PROFILE&lt;/a&gt;&lt;/code&gt;. You can profile a query (&lt;code&gt;SELECT&lt;/code&gt;) statement, or any DML statement such as 
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/statements/insert/#&#34;&gt;INSERT&lt;/a&gt;&lt;/code&gt;, 
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/statements/update/#&#34;&gt;UPDATE&lt;/a&gt;&lt;/code&gt;, 
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/statements/copy/#&#34;&gt;COPY&lt;/a&gt;&lt;/code&gt;, and 
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/statements/merge/#&#34;&gt;MERGE&lt;/a&gt;&lt;/code&gt;. The statement returns with a profile summary:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Profile identifiers &lt;code&gt;transaction_id&lt;/code&gt; and &lt;code&gt;statement_id&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Initiator memory for the query&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Total memory required&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;=&amp;gt; PROFILE SELECT customer_name, annual_income FROM public.customer_dimension
   WHERE (customer_gender, annual_income) IN (SELECT customer_gender, MAX(annual_income)
   FROM public.customer_dimension GROUP BY customer_gender);NOTICE 4788:  Statement is being profiled
HINT:  Select * from v_monitor.execution_engine_profiles where transaction_id=45035996274760535 and statement_id=1;
NOTICE 3557:  Initiator memory for query: [on pool general: 2783428 KB, minimum: 2312914 KB]
NOTICE 5077:  Total memory required by query: [2783428 KB]
  customer_name   | annual_income
------------------+---------------
 James M. McNulty |        999979
 Emily G. Vogel   |        999998
(2 rows)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can use the profile identifiers &lt;code&gt;transaction_id&lt;/code&gt; and &lt;code&gt;statement_id&lt;/code&gt; to obtain detailed profile information for this query from system tables 
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/system-tables/v-monitor-schema/execution-engine-profiles/#&#34;&gt;EXECUTION_ENGINE_PROFILES&lt;/a&gt;&lt;/code&gt; and 
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/system-tables/v-monitor-schema/query-plan-profiles/#&#34;&gt;QUERY_PLAN_PROFILES&lt;/a&gt;&lt;/code&gt;. You can also use these identifiers to obtain resource consumption data from system table 
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/system-tables/v-monitor-schema/query-consumption/#&#34;&gt;QUERY_CONSUMPTION&lt;/a&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;=&amp;gt; SELECT path_id, path_line::VARCHAR(68), running_time FROM v_monitor.query_plan_profiles
    WHERE transaction_id=45035996274760535 AND statement_id=1 ORDER BY path_id, path_line_index;
 path_id |                              path_line                               |  running_time
---------+----------------------------------------------------------------------+-----------------
       1 | +-JOIN HASH [Semi] [Cost: 631, Rows: 25K (NO STATISTICS)] (PATH ID:  | 00:00:00.052478
       1 | |  Join Cond: (customer_dimension.customer_gender = VAL(2)) AND (cus |
       1 | |  Materialize at Output: customer_dimension.customer_name           |
       1 | |  Execute on: All Nodes                                             |
       2 | | +-- Outer -&amp;gt; STORAGE ACCESS for customer_dimension [Cost: 30, Rows | 00:00:00.051598
       2 | | |      Projection: public.customer_dimension_b0                    |
       2 | | |      Materialize: customer_dimension.customer_gender, customer_d |
       2 | | |      Execute on: All Nodes                                       |
       2 | | |      Runtime Filters: (SIP1(HashJoin): customer_dimension.custom |
       4 | | | +---&amp;gt; GROUPBY HASH (GLOBAL RESEGMENT GROUPS) (LOCAL RESEGMENT GR | 00:00:00.050566
       4 | | | |      Aggregates: max(customer_dimension.annual_income)         |
       4 | | | |      Group By: customer_dimension.customer_gender              |
       4 | | | |      Execute on: All Nodes                                     |
       5 | | | | +---&amp;gt; STORAGE ACCESS for customer_dimension [Cost: 30, Rows: 5 | 00:00:00.09234
       5 | | | | |      Projection: public.customer_dimension_b0                |
       5 | | | | |      Materialize: customer_dimension.customer_gender, custom |
       5 | | | | |      Execute on: All Nodes                                   |
(17 rows)
&lt;/code&gt;&lt;/pre&gt;
      </description>
    </item>
    
    <item>
      <title>Admin: Labeling statements</title>
      <link>/en/admin/profiling-db-performance/labeling-statements/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/en/admin/profiling-db-performance/labeling-statements/</guid>
      <description>
        
        
        &lt;p&gt;To quickly identify queries and other operations for profiling and debugging purposes, include the &lt;a href=&#34;../../../en/sql-reference/language-elements/hints/label/#&#34;&gt;LABEL&lt;/a&gt; hint.&lt;/p&gt;
&lt;p&gt;LABEL hints are valid in the following statements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;../../../en/sql-reference/statements/copy/#&#34;&gt;COPY&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;../../../en/sql-reference/statements/delete/#&#34;&gt;DELETE&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;EXPORT statements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;../../../en/sql-reference/statements/export-to-delimited/#&#34;&gt;EXPORT TO DELIMITED&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;../../../en/sql-reference/statements/export-to-orc/#&#34;&gt;EXPORT TO ORC&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;../../../en/sql-reference/statements/export-to-parquet/#&#34;&gt;EXPORT TO PARQUET&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;../../../en/sql-reference/statements/export-to/#&#34;&gt;EXPORT TO VERTICA&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;../../../en/sql-reference/statements/insert/#&#34;&gt;INSERT&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;../../../en/sql-reference/statements/merge/#&#34;&gt;MERGE&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;../../../en/sql-reference/statements/select/#&#34;&gt;SELECT&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;../../../en/sql-reference/statements/update/#&#34;&gt;UPDATE&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;../../../en/sql-reference/statements/select/union-clause/&#34;&gt;UNION&lt;/a&gt;: Valid in the UNION&#39;s first SELECT statement. Vertica ignores labels in subsequent SELECT statements.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;SELECT /*+label(myselectquery)*/ COUNT(*) FROM t;
INSERT /*+label(myinsertquery)*/ INTO t VALUES(1);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;After you add a label to one or more statements, query the &lt;a href=&#34;../../../en/sql-reference/system-tables/v-monitor-schema/query-profiles/#&#34;&gt;QUERY_PROFILES&lt;/a&gt; system table to see which queries ran with your supplied labels. The QUERY_PROFILES system table IDENTIFIER column returns the user-defined label that you previously assigned to a statement. You can also obtain other query-specific data that can be useful for querying other system tables, such as transaction IDs.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;=&amp;gt; SELECT identifier, query FROM query_profiles;
     identifier | query
 ---------------+-----------------------------------------------------------
  myselectquery | SELECT /*+label(myselectquery)*/ COUNT(*) FROM t;
  myinsertquery | INSERT /*+label(myinsertquery)*/ INTO t VALUES(1);
  myupdatequery | UPDATE /*+label(myupdatequery)*/ t SET a = 2 WHERE a = 1;
  mydeletequery | DELETE /*+label(mydeletequery)*/ FROM t WHERE a = 1;
                | SELECT identifier, query from query_profiles;
(5 rows)
&lt;/code&gt;&lt;/pre&gt;
      </description>
    </item>
    
    <item>
      <title>Admin: Real-time profiling</title>
      <link>/en/admin/profiling-db-performance/real-time-profiling/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/en/admin/profiling-db-performance/real-time-profiling/</guid>
      <description>
        
        
        &lt;p&gt;You can monitor long-running queries while they execute by querying system table 
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/system-tables/v-monitor-schema/execution-engine-profiles/#&#34;&gt;EXECUTION_ENGINE_PROFILES&lt;/a&gt;&lt;/code&gt;. This table contains available profiling counters for internal operations and user statements. You can use the Linux &lt;code&gt;watch&lt;/code&gt; command to query this table at frequent intervals.&lt;/p&gt;
&lt;p&gt;Queries for real-time profiling data require a transaction ID. If the transaction executes multiple statements, the query also requires a statement ID to identify the desired statement. If you &lt;a href=&#34;../../../en/admin/profiling-db-performance/profiling-single-statements/&#34;&gt;profile individual queries&lt;/a&gt;, the query returns with the statement&#39;s transaction and statement IDs. You can also obtain transaction and statement IDs from the 
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/system-tables/v-monitor-schema/system-sessions/#&#34;&gt;SYSTEM_SESSIONS&lt;/a&gt;&lt;/code&gt; system table.&lt;/p&gt;
&lt;h2 id=&#34;profiling-counters&#34;&gt;Profiling counters&lt;/h2&gt;
&lt;p&gt;The 
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/system-tables/v-monitor-schema/execution-engine-profiles/#&#34;&gt;EXECUTION_ENGINE_PROFILES&lt;/a&gt;&lt;/code&gt; system table contains available profiling counters for internal operations and user statements. Real-time profiling counters are available for all statements while they execute, including internal operations such as &lt;a class=&#34;glosslink&#34; href=&#34;../../../en/glossary/mergeout/&#34; title=&#34;&#34;&gt;mergeout&lt;/a&gt;, &lt;a class=&#34;glosslink&#34; href=&#34;../../../en/glossary/recovery/&#34; title=&#34;OpenText&amp;amp;trade; Analytics Database can restore the database to a fully functional state after one or more nodes in the system experiences a software- or hardware-related failure.&#34;&gt;recovery&lt;/a&gt;, and &lt;a class=&#34;glosslink&#34; href=&#34;../../../en/glossary/refresh-projections/&#34; title=&#34;Ensures that all projections on a node are up-to-date (can participate in query execution).&#34;&gt;refresh&lt;/a&gt;. Unless you explicitly enable profiling using the keyword &lt;code&gt;PROFILE&lt;/code&gt; on a specific SQL statement, or generally &lt;a href=&#34;../../../en/admin/profiling-db-performance/enabling-profiling/&#34;&gt;enable profiling&lt;/a&gt; for the database and/or the current session, profiling counters are unavailable after the statement completes.&lt;/p&gt;
&lt;p&gt;Useful counters include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Execution time (µs)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Rows produced&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Total merge phases&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Completed merge phases&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Current size of temp files (bytes)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can view all available counters by querying 
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/system-tables/v-monitor-schema/execution-engine-profiles/#&#34;&gt;EXECUTION_ENGINE_PROFILES&lt;/a&gt;&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;=&amp;gt; SELECT DISTINCT(counter_name) FROM EXECUTION_ENGINE_PROFILES;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To monitor the profiling counters, you can run a command like the following using a retrieved transaction ID (&lt;code&gt;a000000000027&lt;/code&gt;):&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;=&amp;gt; SELECT * FROM execution_engine_profiles
   WHERE TO_HEX(transaction_id)=&amp;#39;a000000000027&amp;#39;
   AND counter_name = &amp;#39;execution time (us)&amp;#39;
   ORDER BY node_name, counter_value DESC;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The following example finds operators with the largest execution time on each node:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;=&amp;gt; SELECT node_name, operator_name, counter_value execution_time_us FROM V_MONITOR.EXECUTION_ENGINE_PROFILES WHERE counter_name=&amp;#39;execution time (us)&amp;#39; LIMIT 1 OVER(PARTITION BY node_name ORDER BY counter_value DESC);
    node_name     | operator_name | execution_time_us
------------------+---------------+-------------------
 v_vmart_node0001 | Join          |            131906
 v_vmart_node0002 | Join          |            227778
 v_vmart_node0003 | NetworkSend   |            524080
(3 rows)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;linux-watch-command&#34;&gt;Linux watch command&lt;/h2&gt;
&lt;p&gt;You can use the Linux &lt;code&gt;watch&lt;/code&gt; command to monitor long-running queries at frequent intervals. Common use cases include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Observing executing operators within a query plan on each database cluster node.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Monitoring workloads that might be unbalanced among cluster nodes—for example, some nodes become idle while others are active. Such imbalances might be caused by data skews or by hardware issues.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the following example, &lt;code&gt;watch&lt;/code&gt; queries operators with the largest execution time on each node. The command specifies to re-execute the query each second:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;watch -n 1 -d &amp;#34;vsql VMart -c\&amp;#34;SELECT node_name, operator_name, counter_value execution_time_us
FROM v_monitor.execution_engine_profiles WHERE counter_name=&amp;#39;execution time (us)&amp;#39;
LIMIT 1 OVER(PARTITION BY node_name ORDER BY counter_value DESC);

Every 1.0s: vsql VMart -c&amp;#34;SELECT node_name, operator_name, counter_value execution_time_us FROM v_monitor.execu...  Thu Jan 21 15:00:44 2016

    node_name     | operator_name | execution_time_us
------------------+---------------+-------------------
 v_vmart_node0001 | Root          |            110266
 v_vmart_node0002 | UnionAll      |             38932
 v_vmart_node0003 | Scan          |             22058
(3 rows)
&lt;/code&gt;&lt;/pre&gt;
      </description>
    </item>
    
    <item>
      <title>Admin: Profiling query resource consumption</title>
      <link>/en/admin/profiling-db-performance/profiling-query-resource-consumption/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/en/admin/profiling-db-performance/profiling-query-resource-consumption/</guid>
      <description>
        
        
        &lt;p&gt;OpenText™ Analytics Database collects data on resource usage of all queries—including those that fail—and summarizes this data in system table 
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/system-tables/v-monitor-schema/query-consumption/#&#34;&gt;QUERY_CONSUMPTION&lt;/a&gt;&lt;/code&gt;. This data includes the following information about each query:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Wall clock duration&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;CPU cycles consumed&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Memory reserved and allocated&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Network bytes sent and received&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Disk bytes read and written&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Bytes spilled&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Threads allocated&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Rows output to client&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Rows read and written&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can obtain information about individual queries through their transaction and statement IDs. Columns &lt;code&gt;TRANSACTION_ID&lt;/code&gt; and &lt;code&gt;STATEMENT_ID&lt;/code&gt; provide a unique key to each query statement.

&lt;div class=&#34;alert admonition note&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;admonition-head&#34;&gt;Note&lt;/h4&gt;

One exception applies: a query with multiple plans has a record for each plan.

&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;For example, the following query is profiled:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;=&amp;gt; PROFILE SELECT pd.category_description AS &amp;#39;Category&amp;#39;, SUM(sf.sales_quantity*sf.sales_dollar_amount) AS &amp;#39;Total Sales&amp;#39;
     FROM store.store_sales_fact sf
     JOIN public.product_dimension pd ON pd.product_version=sf.product_version AND pd.product_key=sf.product_key
     GROUP BY pd.category_description;
NOTICE 4788:  Statement is being profiled
HINT:  Select * from v_monitor.execution_engine_profiles where transaction_id=45035996274751822 and statement_id=1;
NOTICE 3557:  Initiator memory for query: [on pool general: 256160 KB, minimum: 256160 KB]
NOTICE 5077:  Total memory required by query: [256160 KB]
             Category             | Total Sales
----------------------------------+-------------
 Non-food                         |  1147919813
 Misc                             |  1158328131
 Medical                          |  1155853990
 Food                             |  4038220327
(4 rows)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can use the transaction and statement IDs that the database returns to get profiling data from &lt;code&gt;QUERY_CONSUMPTION&lt;/code&gt;—for example, the total number of bytes sent over the network for a given query:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;=&amp;gt; SELECT NETWORK_BYTES_SENT FROM query_consumption WHERE transaction_id=45035996274751822 AND statement_id=1;
 NETWORK_BYTES_SENT
--------------------
             757745
(1 row)
&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&#34;alert admonition note&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;admonition-head&#34;&gt;Note&lt;/h4&gt;

&lt;code&gt;QUERY_CONSUMPTION&lt;/code&gt; saves data from all queries, whether explicitly profiled or not.

&lt;/div&gt;
&lt;h2 id=&#34;query_consumption-versus-execution-_engine_profiles&#34;&gt;QUERY_CONSUMPTION versus EXECUTION _ENGINE_PROFILES&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;QUERY_CONSUMPTION&lt;/code&gt; includes data that it rolls up from counters in 
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/system-tables/v-monitor-schema/execution-engine-profiles/#&#34;&gt;EXECUTION_ENGINE_PROFILES&lt;/a&gt;&lt;/code&gt;. In the previous example, &lt;code&gt;NETWORK_BYTES_SENT&lt;/code&gt; rolls up data that is accessible through multiple counters in &lt;code&gt;EXECUTION_ENGINE_PROFILES&lt;/code&gt;. The equivalent query on &lt;code&gt;EXECUTION_ENGINE_PROFILES&lt;/code&gt; looks like this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;=&amp;gt; SELECT operator_name, counter_name, counter_tag, SUM(counter_value) FROM execution_engine_profiles
     WHERE transaction_id=45035996274751822 AND statement_id=1 AND counter_name=&amp;#39;bytes sent&amp;#39;
     GROUP BY ROLLUP (operator_name, counter_name, counter_tag) ORDER BY 1,2,3, GROUPING_ID();
 operator_name | counter_name |          counter_tag           |  SUM
---------------+--------------+--------------------------------+--------
 NetworkSend   | bytes sent   | Net id 1000 - v_vmart_node0001 | 252471
 NetworkSend   | bytes sent   | Net id 1000 - v_vmart_node0002 | 251076
 NetworkSend   | bytes sent   | Net id 1000 - v_vmart_node0003 | 253717
 NetworkSend   | bytes sent   | Net id 1001 - v_vmart_node0001 |    192
 NetworkSend   | bytes sent   | Net id 1001 - v_vmart_node0002 |    192
 NetworkSend   | bytes sent   | Net id 1001 - v_vmart_node0003 |      0
 NetworkSend   | bytes sent   | Net id 1002 - v_vmart_node0001 |     97
 NetworkSend   | bytes sent   |                                | 757745
 NetworkSend   |              |                                | 757745
               |              |                                | 757745
(10 rows)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;QUERY_CONSUMPTION&lt;/code&gt; and &lt;code&gt;EXECUTION_ENGINE_PROFILES&lt;/code&gt; also differ as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;QUERY_CONSUMPTION&lt;/code&gt; saves data from all queries, no matter their duration or whether they are explicitly profiled. It also includes data on unsuccessful queries.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;EXECUTION_ENGINE_PROFILES&lt;/code&gt; only includes data from queries whose length of execution exceeds a set threshold, or that you explicitly profile. It also excludes data of unsuccessful queries.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Admin: Profiling query plans</title>
      <link>/en/admin/profiling-db-performance/profiling-query-plans/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/en/admin/profiling-db-performance/profiling-query-plans/</guid>
      <description>
        
        
        &lt;p&gt;To monitor real-time flow of data through a query plan and its individual &lt;a class=&#34;glosslink&#34; href=&#34;../../../en/glossary/path-quality-plan/&#34; title=&#34;The execution strategy of the OpenText&amp;amp;trade; Analytics Database cost-based query optimizer, denoting a sub operation in the query plan.&#34;&gt;paths&lt;/a&gt;, query the following system tables:&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/system-tables/v-monitor-schema/execution-engine-profiles/#&#34;&gt;EXECUTION_ENGINE_PROFILES&lt;/a&gt;&lt;/code&gt; and 
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/system-tables/v-monitor-schema/query-plan-profiles/#&#34;&gt;QUERY_PLAN_PROFILES&lt;/a&gt;&lt;/code&gt;. These tables provides data on how OpenText™ Analytics Database executed a query plan and its individual &lt;a class=&#34;glosslink&#34; href=&#34;../../../en/glossary/path-quality-plan/&#34; title=&#34;The execution strategy of the OpenText&amp;amp;trade; Analytics Database cost-based query optimizer, denoting a sub operation in the query plan.&#34;&gt;paths&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/system-tables/v-monitor-schema/execution-engine-profiles/#&#34;&gt;EXECUTION_ENGINE_PROFILES&lt;/a&gt;&lt;/code&gt; summarizes query execution runs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/system-tables/v-monitor-schema/query-plan-profiles/#&#34;&gt;QUERY_PLAN_PROFILES&lt;/a&gt;&lt;/code&gt; shows the real-time flow of data, and the time and resources consumed for each query plan path.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each query plan path has a unique ID, as shown in the following 
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/statements/explain/#&#34;&gt;EXPLAIN&lt;/a&gt;&lt;/code&gt; output fragment.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;../../../images/profiling-query-plans.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Both tables provide path-specific data. For example, &lt;code&gt;QUERY_PLAN_PROFILES&lt;/code&gt; provides high-level data for each path, which includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Length of a query operation execution&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;How much memory that path&#39;s operation consumed&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Size of data sent/received over the network&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example, you might observe that a &lt;code&gt;GROUP BY HASH&lt;/code&gt; operation executed in 0.2 seconds using 100MB of memory.&lt;/p&gt;
&lt;h2 id=&#34;requirements&#34;&gt;Requirements&lt;/h2&gt;
&lt;p&gt;Real-time profiling minimally requires the ID of the transaction to monitor. If the transaction includes multiple statements, you also need the statement ID. You can get statement and transaction IDs by issuing 
&lt;code&gt;&lt;a href=&#34;../../../en/sql-reference/statements/profile/#&#34;&gt;PROFILE&lt;/a&gt;&lt;/code&gt; on the query to profile. You can then use these identifiers to query system tables &lt;code&gt;EXECUTION_ENGINE_PROFILES&lt;/code&gt; and &lt;code&gt;QUERY_PLAN_PROFILES&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For more information, see &lt;a href=&#34;../../../en/admin/profiling-db-performance/profiling-single-statements/#&#34;&gt;Profiling single statements&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Admin: Sample views for counter information</title>
      <link>/en/admin/profiling-db-performance/sample-views-counter-information/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/en/admin/profiling-db-performance/sample-views-counter-information/</guid>
      <description>
        
        
        &lt;p&gt;The EXECUTION_ENGINE_PROFILES table contains the data for each profiling counter as a row within the table. For example, the execution time (us) counter is in one row, and the rows produced counter is in a second row. Since there are many different profiling counters, many rows of profiling data exist for each operator. Some sample views are installed by default to simplify the viewing of profiling counters.&lt;/p&gt;
&lt;h2 id=&#34;running-scripts-to-create-the-sample-views&#34;&gt;Running scripts to create the sample views&lt;/h2&gt;
&lt;p&gt;The following script creates the &lt;code&gt;v_demo&lt;/code&gt; schema and places the views in that schema.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;/opt/vertica/scripts/demo_eeprof_view.sql
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;viewing-counter-values-using-the-sample-views&#34;&gt;Viewing counter values using the sample views&lt;/h2&gt;
&lt;p&gt;There is one view for each of the profiling counters to simplify viewing of a single counter value. For example, to view the execution time for all operators, issue the following command from the database:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;=&amp;gt; SELECT * FROM v_demo.eeprof_execution_time_us;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To view all counter values available for all profiled queries:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;=&amp;gt; SELECT * FROM v_demo.eeprof_counters;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To select all distinct operators available for all profiled queries:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;=&amp;gt; SELECT * FROM v_demo.eeprof_operators;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;combining-sample-views&#34;&gt;Combining sample views&lt;/h2&gt;
&lt;p&gt;These views can be combined:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;=&amp;gt; SELECT * FROM v_demo.eeprof_execution_time_us
    NATURAL LEFT OUTER JOIN v_demo.eeprof_rows_produced;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To view the execution time and rows produced for a specific transaction and &lt;code&gt;statement_id&lt;/code&gt; ranked by execution time on each node:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;=&amp;gt; SELECT * FROM v_demo.eeprof_execution_time_us_rank
    WHERE transaction_id=45035996273709699
    AND statement_id=1
    ORDER BY transaction_id, statement_id, node_name, rk;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To view the top five operators by execution time on each node:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;=&amp;gt; SELECT * FROM v_demo.eeprof_execution_time_us_rank
    WHERE transaction_id=45035996273709699
    AND statement_id=1 AND rk&amp;lt;=5
    ORDER BY transaction_id, statement_id, node_name, rk;
&lt;/code&gt;&lt;/pre&gt;
      </description>
    </item>
    
  </channel>
</rss>
