资源描述:
《digoal PostgreSQL Dynamic Trace》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、PostgreSQLDynamicTraceDigoal.zhouMonday,October14,20132013PostgreSQLChinaConferenceSKYMOBI,Hangzhou,ZhejiangAgenda动态跟踪的由来systemtap简介探针介绍PostgreSQL探针及使用举例PostgreSQL自定义探针PostgreSQL探针结合系统探针使用举例动态跟踪的由来PostgreSQL在Linux下的动态跟踪stap运行的5个步骤:1.输入执行代码(.stp或-e‘’),
2、载入tapset库,-I库,解析执行代码.2.从第一步载入的库文件中匹配执行代码中的所有探针,函数,变量,操作符等,从执行代码的上下文中自动推测变量数据类型3.将执行代码转换成C代码/root/.systemtap/cache/e8/stap_e878009262b7836eb07f0b5a0bf0705e_970.c4.生成Linux内核模块文件/root/.systemtap/cache/e8/stap_e878009262b7836eb07f0b5a0bf0705e_970.ko5.将模块加载到内
3、核并与之通讯,拷贝这个内核对象跟踪到的数据到临时文件中.直到stap运行结束或受到中断请求信号.最后staprun从内核中卸载这个ko模块,并且清除整个stap过程产生的临时文件.使用stap跟踪PostgreSQL内核,不需要中断数据库,不影响(或很小的影响)数据库用户请求.http://blog.163.com/digoal@126/blog/static/163877040201391434530674/动态跟踪的由来systemtap简介
4、数据类型字符串,数字(64bit),数组,统计类型操作符字符串.(字符串连接符)整型(64bit)*/+-%(加减乘除取余数)>><<&^
5、(比特左右移,与,异或,或)&&
6、
7、(逻辑与或)一元操作符(+,-,!,~,++,--)(正,负,逻辑非,比特反转,自增,自减)比较操作符(<,>,<=,>=,==,!=),规则匹配(=~,!~)数组[idx1,…idxn]invar_arr(判断索引是否存在)foreach([idx1,…idxn]+-invar_array[@count
8、…@avg]+
9、-)deletevar_arr(清除所有元素),deletevar_arr[idx1,…idxn](清除指定索引的元素)统计类型<<<(往统计类型变量中添加元素),deletestatic_var(清空)其他,a?b:c表达式的值:a真则取b,否则取c上下文变量->取结构field数据代码注释/**/,#,//systemtap简介语句breakandcontinuetry/catchdeleteEXP(expression)forforeachifnext;(nullstate
10、ment)return{}(statementblock)whilesystemtap简介函数function:ret_type(par1:type1,…)functionthatfn:string(arg1:long,arg2){returnsprintf("%d%s",arg1,arg2)}EmbbedC用法function:(:,...)%{%}IO用法STAP_ARG_foo(forargumentsnamedfoo),
11、STAP_RETVALUE%{#include#include%}/*<--toplevel*//*Readsthecharvaluestoredatagivenaddress:*/function__read_char:long(addr:long)%{/*pure*/STAP_RETVALUE=kderef(sizeof(char),STAP_ARG_addr);CATCH_DEREF_FAULT();%}/*<--functionbody*/
12、/*DetermineswhetheranIPpacketisTCP,basedontheiphdr:*/functionis_tcp_packet:long(iphdr){protocol=@cast(iphdr,"iphdr")->protocolreturn(protocol==%{IPPROTO_TCP%})/*<--expression*/