WL#4541: Improved DTrace support in server

Affects: Server-5.4   —   Status: Complete   —   Priority: Medium

The current DTrace support should be improved based on suggestions and patches
from Mikael Ronström, Martin Brown, Alexey Kopytov and others. The goal is to
fix some build issues with the current code (for example, bugs #36403 and
#37584), extend the current set of probes and their arguments to increase
usability, and pave the way for future enhancements and contributions.

Current list of probes in the server:

probe external_lock(int); 
probe insert_row_start(); 
probe insert_row_end(); 
probe filesort_start(); 
probe filesort_end(); 
probe delete_start(); 
probe delete_end(); 
probe insert_start(); 
probe insert_end(); 
probe select_start(); 
probe select_end(); 
probe update_start(); 
probe update_end(); 

List of probes compiled from various sources to replace the current one:

probe connection__start(ulong conn_id, char *user, char *host); 
probe connection__done(int status, ulong conn_id); 
probe command__start(ulong conn_id, int command, char *user, char *host); 
probe command__done(int status); 
probe query__start(char *query, 
                   ulong conn_id, 
                   char *db_name,
                   char *user,
                   char *host); 
probe query__done(int status);
probe query__parse__start(char *query); 
probe query__parse__done(int status); 
probe query__cache__hit(char *query, ulong rows); 
probe query__cache__miss(char *query);
probe query__exec__start(char *query, 
                         ulong connid, 
                         char *db_name,
                         char *user,
                         char *host, 
                         int exec_type); 
probe query__exec__done(int status); 
probe insert__row__start(char *db, char *table); 
probe insert__row__done(int status); 
probe update__row__start(char *db, char *table); 
probe update__row__done(int status); 
probe delete__row__start(char *db, char *table); 
probe delete__row__done(int status);  
probe handler__rdlock__start(char *db, char *table); 
probe handler__wrlock__start(char *db, char *table); 
probe handler__unlock__start(char *db, char *table); 
probe handler__rdlock__done(int status); 
probe handler__wrlock__done(int status); 
probe handler__unlock__done(int status); 
probe filesort__start(char *db, char *table); 
probe filesort__done(int status, ulong rows); 
probe select__start(char *query); 
probe select__done(int status, ulong rows); 
probe insert__start(char *query); 
probe insert__done(int status, ulong rows); 
probe insert__select__start(char *query); 
probe insert__select__done(int status, ulong rows); 
probe update__start(char *query); 
probe update__done(int status, ulong rowsmatches, ulong rowschanged); 
probe multi__update__start(char *query); 
probe multi__update__done(int status, ulong rowsmatches, ulong rowschanged); 
probe delete__start(char *query); 
probe delete__done(int status, ulong rows); 
probe multi__delete__start(char *query); 
probe multi__delete__done(int status, ulong rows); 
probe net__read__start(); 
probe net__read__done(int status, ulong bytes); 
probe net__write__start(ulong bytes); 
probe net__write__done(int status);