Hi Matt,

Thanks for the cross-post - I'm sure the folks here will like to see  
what we are doing!

If anybody has any comments on the DTrace/MySQL stuff, please either  
post here, the DTrace-Discuss list, or send them direct to me (using dev at 
mcslp.com 
  or mc at mysql.com) and I will pass on to the team working on the  
DTrace integration.

MC

On 28 Jan 2008, at 03:20, Matt Ingenthron wrote:

> FYI to folks on this list, MySQL/DTrace integration has been  
> discussed over on the DTrace OpenSOlaris list.
>
> - Matt
>
> From: Luojia Chen <Luojia.Chen at Sun.COM>
> Date: 27 January 2008 02:36:57 GMT
> To: Martin MC Brown <dev at mcslp.com>
> Cc: dtrace-discuss at opensolaris.org, Alex Peng <pengjx73 at yahoo.com>,  
> Brendan Gregg - Sun Microsystems <brendan at sun.com>
> Subject: Re: [dtrace-discuss] DTrace for MySQL?
>
>
> Hi,
>
> It is great to see that some DTrace probes finally goes into the  
> MySQL 6.0 src tree...
>
> I'm wondering if there is any plan to insert more probes into the  
> storage engine layer as well? so that we can measure the time  
> spending on the defined events in addtion to the count of the events  
> which we can get from the other monitor tools, such as:
>     - wait on innodb flush logs(flush_log_start/done)
>     - innodb dirty buffer flush(innodb_dirty_buffer_flush/done)
>     - MyISAM table locks (myisam_wrlock_start/done)
>     - row locks(row_lock_start/done)
>     - innodb buffer wait(reading page synchronous from disk)
>     - innodb spin wait(innodb_spin_wait_start/done)
>     - innodb os wait(innodb_os_wait_start/done)
>     - rollback (rollback_start/done)
>
> and also:
>    - index/table scan(index_scan_start/done, table_scan_start/done)
>     - binlog cache spill to disk(binlog_cache_flush/done)
>
>
>
>
>   Thanks,
>
>   Luojia(Jenny) Chen
>   Software Engineer
>   ISV Engineering
>   v-mail:(510) 550-2394
>   SUN Microsystems
>
> ----- Original Message -----
> From: Martin MC Brown <dev at mcslp.com>
> Date: Saturday, January 26, 2008 12:17 pm
> Subject: Re: [dtrace-discuss] DTrace for MySQL?
> To: Brendan Gregg - Sun Microsystems <brendan at sun.com>
> Cc: dtrace-discuss at opensolaris.org, Alex Peng <pengjx73 at yahoo.com>
>
>
>> Hi Brendan,
>>
>>> G'Day Martin, Folks,
>>>
>>> On Fri, Jan 25, 2008 at 08:50:33AM +0000, Martin MC Brown wrote:
>>> [...]
>>>> You should find, however, that the latest version on  
>>>> mysql.bkbits.net
>>>> of the 6.0 tree has the code. You'll need to use --enable-dtrace
>>>> during configure to enable it during build.
>>>
>>> Thanks for the link, and I can see the 26 probes listed in sql/
>>> probes.h.
>>>
>>> I'm glad this provider is now public and we can discuss it - it's
>>
>>> going
>>> to be of great use, and I'm really looking forward to writing more
>>
>>> scripts
>>> for it.  I tested a prototype about six months ago and emailed
>> demos
>>> of
>>> scripts and suggestions for probe and argument additions; by the
>>> looks of
>>> the current probe list, these demos and suggestions may still be
>>> relevant,
>>> so I've attached them below.
>>
>> Thanks - interesting :)
>>
>>> Note, the demos that follow are not possible with the probes I see
>> in
>>> the 6.0 tree, since they require arguments other than just the
>>> thread id.
>>>
>>> The 6.0 tree does look like it has a well thought out set of basic
>>
>>> probes,
>>> but not interesting arguments such as query strings and database
>>> names.
>>> Adding these arguments shouldn't be that difficult (I still have the
>>> mysql patch from when I tried it earlier), the difficult part is
>>> choosing
>>> consistent arguments across probes (something worth discussing  
>>> here).
>>> Writing DTrace scripts will help confirm that the argument choice is
>>> working.
>>
>> Please feel free to suggest anything/everything - I'll pass it back
>> to
>> the team working on this :)
>>
>> I've already requested my on enhancement, many of which you already
>>
>> cover (I would like, for example, the thread ID (as exposed
>> internally
>> through SHOW PROCESSLIST or query at a minimum when examining the
>> output, otherwise we merely get counters of events, rather than the
>>
>> ability to track individual queries through the system.
>>
>> To be fair, remember that at the moment we are merely examining where
>>
>> best to put these things. Particularly in the 6.0 server there are
>> some changes that might affect some areas of this. We are also, as I
>>
>> mentioned originally, trying to be compatible with OS X, but I know
>>
>> there are some limitations with the current DTrace implementation on
>>
>> OS X that might make that process more complex than we would like.
>>
>>> *** Demos ***
>>>
>>> The following are fairly simple but useful.  The scripts are in the
>>
>>> tar
>>> file attached.
>>
>> It should go without saying that these are pretty cool :)
>>
>>>
>>> *** Suggestions ***
>>>
>>> here are my suggestions:
>>>
>>> 1) Probes
>>>
>>> There are many probes to pick from, which is good, but some are
>>> missing -
>>> such as probes for the query cache (I have added query cache probes
>> in
>>> my patch).  A quick way to check what might be useful, is to search
>>
>>> for
>>> the DBUG_PRINT calls in the code - if it is instrumented for
>>> debugging,
>>> it may be useful to instrument it for DTrace.
>>>
>>> I'd suggest probes to observe:
>>>
>>> - query cache hits / misses
>>> - connection logins (successful and failed)
>>> - database startup / shutdown
>>> - sorts
>>> - replication events
>>>
>>> Of course, we need to focus on probes that are actually useful at
>>> solving real issues, and not create too many unneeded probes.
>>> Having a
>>> small sufficient set of probes will make it easier to keep the
>>> provider
>>> as a stable interface.
>>>
>>> Also, the "-end" probes I think would be better renamed "-done"
>>> probes,
>>> as is the convention in other DTrace providers (such as "io").
>>
>> I will pass all of this on. As I said earlier, we are still in the
>> early stages of the process and are trying to work out where best to
>>
>> add the probes, both in terms of the information that can be tracked/
>>
>> returned and in terms of selecting the most relevant location.
>>
>>> 2) Probe Arguments
>>>
>>> The provider really needs many more arguments, and there are plenty
>> to
>>> pick from in the THD class and what it inherits.  Here is what I got
>>> going in my suggested patch:
>>>
>>> Probes,
>>>       query-parse-start(thr, database, user, host, query)
>>>       query-parse-done(thr, database, user, host, query, result)
>>>       query-execute-start(thr, database, user, host, query)
>>>       query-execute-done(thr, database, user, host, query, result)
>>>       query-cache-hit(thr, database, user, host, query)
>>>       query-cache-miss(thr, database, user, host, query)
>>>
>>> Arguments,
>>>       (void *)thr             THR Class pointer (for raw debugging)
>>>       (char *)database        Database name string
>>>       (char *)user            Username string
>>>       (char *)host            Hostname or IP address string
>>>       (char *)query           SQL Query string
>>>       (int)result             Result (0 == success, -1 == failure)
>>>
>>> I didn't find thread_id useful (DTrace already has thread IDs), but
>>
>>> the
>>> thr pointer may be useful (both as a unique ID and for raw
>> debugging
>>> - where
>>> pretty much any data can be fetch if you know the offset).
>>>
>>> The order of arguments is from most to least common.  Most probes
>>
>>> should
>>> have thr and database, so they go first, followed by user and host,
>>> then specific arguments - such as query string and result.
>>>
>>> The result argument is invaluable.  I picked variables that seemed
>>
>>> reasonable
>>> for that patch - but please check them more carefully (they look  
>>> fine,
>>> but I didn't read all the code).
>>
>> I'll check this out. It would be nice if we could get some, all or
>> more of these into the code.
>>
>>> There is a lot of very cool info in the THD class, but we need to
>>
>>> consider
>>> stability (and not expose private implementation details).
>>
>>> For connection/login probes, the Security_context class has some  
>>> very
>>> interesting fields - check them out.  Although, they aren't always
>>
>>> populated
>>> (I used "user" and "host_or_ip" in my suggested patch - as they
>> seem
>>> most
>>> frequently populated).
>>
>>
>> There's lots all over the place that we could if we wanted to. I
>> think
>> the key thing is possibly not what we add, but what we don't add.
>> There's a temptation here to add lots and track everything, but we
>> have to be sensible...
>>
>> MC
>>
>> --
>> Martin 'MC' Brown, mc at mcslp.com
>> Everything MCslp: http://planet.mcslp.com
>>
>>
>>
>> _______________________________________________
>> dtrace-discuss mailing list
>> dtrace-discuss at opensolaris.org
>>
> _______________________________________________
> dtrace-discuss mailing list
> dtrace-discuss at opensolaris.org
>
>
> _______________________________________________
>
>
> webstack-discuss mailing list
> webstack-discuss at opensolaris.org
> http://mail.opensolaris.org/mailman/listinfo/webstack-discuss

--
Martin 'MC' Brown, mc at mcslp.com
Everything MCslp: http://planet.mcslp.com



Reply via email to