You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cayenne.apache.org by Hans Pikkemaat <h....@tsi-solutions.nl> on 2009/12/29 09:03:51 UTC

notification of query

Hi,

I'm doing some performance tests and want to see when the query is 
actually run.
I'm running some test queries with different cache settings to see what 
happens
performance and memory wise. For this reason I need to know when an actual
sql statement is being executed at the database. So my question is:

Is there a way (2.0.4) to get a notification or callback when a query 
(or more generic: sql statement) is executed?

I'm already using the log4j so I do see when the query runs but I need a 
callback to be
able to store statistics about a query execution. Preferably including 
result counts and execution timing.

I saw the explanation about the DataContextDelegate but this one is 
called even when a query is in the cache.

tx

Hans


Re: notification of query

Posted by Aristedes Maniatis <ar...@maniatis.org>.
One more approach is to gather statistics in the database. Since you often don't care about the really fast queries, this can be quite useful. With mysql 5.1 you can do this:

set-variable            = long_query_time=0.5
slow_query_log_file     = /var/mysql-data/databases/log-slow-queries.log
slow_query_log          = ON

Note that the long query time is in seconds and since 5.1 can take values less than one second. There is another flag which logs output which uses non-indexed queries.

Then I recommend this tool: mysqlsla

It will analyse your logs and give you aggregated summaries which are really nice.


Ari Maniatis


On 29/12/09 7:16 PM, Andrus Adamchik wrote:
> We started on an implementation of a flexible statistics gathering
> engine some time ago:
>
> https://issues.apache.org/jira/browse/CAY-1173
>
> I hope this gets finished in Cayenne 3.1. Until then you have 2 places
> where you may try intercepting query events:
>
> * DataSource. Since DataSource is an interface, you can implement your
> own wrapper around the current DataSource that you are using, set up via
> a custom DataSourceFactory. Then you'd have to also decorate Connection
> and PreparedStatement. PreparedStatement wrapper would gather needed
> statistics.
>
> * Log4J. You can create an appender that analyzes Cayenne QueryLogger
> log events gathering needed stats.
>
> Andrus
>
>
> On Dec 29, 2009, at 10:03 AM, Hans Pikkemaat wrote:
>> Hi,
>>
>> I'm doing some performance tests and want to see when the query is
>> actually run.
>> I'm running some test queries with different cache settings to see
>> what happens
>> performance and memory wise. For this reason I need to know when an
>> actual
>> sql statement is being executed at the database. So my question is:
>>
>> Is there a way (2.0.4) to get a notification or callback when a query
>> (or more generic: sql statement) is executed?
>>
>> I'm already using the log4j so I do see when the query runs but I need
>> a callback to be
>> able to store statistics about a query execution. Preferably including
>> result counts and execution timing.
>>
>> I saw the explanation about the DataContextDelegate but this one is
>> called even when a query is in the cache.
>>
>> tx
>>
>> Hans
>

-- 

-------------------------->
Aristedes Maniatis
GPG fingerprint CBFB 84B4 738D 4E87 5E5C  5EFA EF6A 7D2E 3E49 102A

Re: notification of query

Posted by Andrus Adamchik <an...@objectstyle.org>.
We started on an implementation of a flexible statistics gathering  
engine some time ago:

   https://issues.apache.org/jira/browse/CAY-1173

I hope this gets finished in Cayenne 3.1. Until then you have 2 places  
where you may try intercepting query events:

* DataSource. Since DataSource is an interface, you can implement your  
own wrapper around the current DataSource that you are using, set up  
via a custom DataSourceFactory. Then you'd have to also decorate  
Connection and PreparedStatement. PreparedStatement wrapper would  
gather needed statistics.

* Log4J. You can create an appender that analyzes Cayenne QueryLogger  
log events gathering needed stats.

Andrus


On Dec 29, 2009, at 10:03 AM, Hans Pikkemaat wrote:
> Hi,
>
> I'm doing some performance tests and want to see when the query is  
> actually run.
> I'm running some test queries with different cache settings to see  
> what happens
> performance and memory wise. For this reason I need to know when an  
> actual
> sql statement is being executed at the database. So my question is:
>
> Is there a way (2.0.4) to get a notification or callback when a  
> query (or more generic: sql statement) is executed?
>
> I'm already using the log4j so I do see when the query runs but I  
> need a callback to be
> able to store statistics about a query execution. Preferably  
> including result counts and execution timing.
>
> I saw the explanation about the DataContextDelegate but this one is  
> called even when a query is in the cache.
>
> tx
>
> Hans