So… Baron blogged about wanting higher precision timers from the mysql binary and that running sed on the binary wasn’t cutting it. However… I am not one to give up that easily!
This is what LD_PRELOAD was made for! Evil nasty hacks to make your life easier!
By looking at the mysql.cc source code, I can easily work out how this works… I just have to override two calls! They being sysconf() (we fake how many ticks per second there are) and times() (let’s return a much higher precision number).
Combined with the sed hack on the binary to change the sprintf call to print out the higher precision number, we have:
mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 710720 | +----------+ 1 row in set (1.080110 sec)
Get it from my junkcode: http://www.flamingspork.com/junkcode/high_precision_mysql_timer.c
(or you can get it from http://paste.drizzle.org/show/364/)
[...] This post was mentioned on Twitter by drizzlenews and Zuissi, Stewart Smith. Stewart Smith said: I am evil: http://is.gd/mBl7et LD_PRELOAD to the rescue! [...]
Muah hah hah!!!
Great and … nasty! :-)
I was jut thinking about something similar the other day; is it possible, to hijack all mysql c/c++ functions this way?
For example (file)sort?
BTW how leagal is this? :-)
perfectly legal. You can override a lot of things using LD_PRELOAD, but really, with software you have the source for – it’s best to fix it.
Awesome.
Add the following to your instructions, there are a lot of people out there that will need the help.
chmod +x ./mysql-fixed
And I’d suggest this.
sed -e ‘s/%\.2f sec/%.6f sec/’ `which mysql` > mysql-fixed
true, the better sed expression probably works better.
and let me be just a tiny bit scared that people may end up using this…
[...] patch he links back to an article on his own site which seems to be not found. The author of the high precision mysql timer patch is Stewart Smith.I personally got the most out of Chapter eight, full of self-described hidden [...]