在MySQL源碼dtrace.cmake中可以找到定義:
Check if OS supports DTraceMACRO(CHECK_DTRACE) FIND_PROGRAM(DTRACE dtrace) MARK_AS_ADVANCED(DTRACE) # On FreeBSD, dtrace does not handle userland tracing yet IF(DTRACE AND NOT CMAKE_SYSTEM_NAME MATCHES "FreeBSD") SET(ENABLE_DTRACE ON CACHE BOOL "Enable dtrace") ENDIF()
可知Linux環境下,只要環境中存在dtrace就會開啟ENABLE_DTRACE。於是裝好systemtap-sdt-dev包,再進行cmake就可以了. 不需要額外的配置選項,也不需要開啟WITH_DEBUG。
(說明:按照手冊,systemtap-sdt-dev中的dtrace用於將file.d文件轉成頭文件參與編譯,並非真正的dtrace)
> apt-get install -sdt-dev> cmake -DBUILD_CONFIG=mysql_release -DDOWNLOAD_BOOST=1 -DDOWNLOAD_BOOST_TIMEOUT=3600 -DWITH_BOOST=/opt/boost -L .
檢查cmake的輸出變量 (輸出經過截斷):
...ENABLE_DTRACE:BOOL=ON...WITH_DEBUG:BOOL=OFF...
ENABLE_DTRACE編譯的MySQL支持mark觀測點 (輸出經過截斷):
> stap -L 'process("/usr/local/mysql/bin/mysqld").mark("*")'process("/usr/local/mysql/bin/mysqld").mark("command__done") $arg1:longprocess("/usr/local/mysql/bin/mysqld").mark("command__start") $arg1:long $arg2:long $arg3:long $arg4:longprocess("/usr/local/mysql/bin/mysqld").mark("connection__done") $arg1:long $arg2:long...process("/usr/local/mysql/bin/mysqld").mark("update__start") $arg1:long