¾�ΥС�������ʸ�� �� 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

27.4. ưŪ����

PostgreSQL�ϡ��ǡ����١��������Ф�ưŪ���פ򥵥ݡ��Ȥ��뵡ǽ���󶡤��ޤ�������ˤ�ꡢ�����桼�ƥ���ƥ��򥳡��ɤ�����Υݥ���ȤǸƤӽФ����Ȥ��Ǥ������פ�Ԥ����Ȥ��Ǥ���褦�ˤʤ�ޤ���

¿�������פ�ץ������ѤΥݥ���Ȥϡ����Ǥ˥�����������������¸�ߤ��ޤ��������Υץ����֤ϥǡ����١����γ�ȯ�Ԥ�����Ԥ��Ȥ����Ȥ�տޤ��Ƥ��ޤ����ǥե���ȤǤϡ������Υץ����֤�PostgreSQL�˥���ѥ��뤵��ޤ��󡣥桼��������Ū��configure������ץȤǥץ����֤�ͭ���ˤ���褦�����ꤹ��ɬ�פ�����ޤ���

���ߡ�OpenSolaris��Soralis 10�������ơ�Mac OS X Leopard�����Ѳ�ǽ��DTrace�桼�ƥ���ƥ��Τߤ����ݡ��Ȥ���Ƥ��ޤ���DTrace�Ͼ���FreeBSD�䤽��¾�Υ��ڥ졼�ƥ��󥰥����ƥ�����ѤǤ���褦�ˤʤ뤳�Ȥ�ͽ�ꤵ��Ƥ��ޤ���SystemTap�ץ��������ȤǤ�Dtrace�����ε�ǽ��Linux�������󶡤��Ƥ��ޤ���¾��ưŪ���ץ桼�ƥ���ƥ��Υ��ݡ��Ȥϡ�src/include/utils/probes.h���PG_TRACE�ޥ���������ѹ����뤳�Ȥǡ�������ϲ�ǽ�Ǥ���

27.4.1. ưŪ���פΤ���Υ���ѥ���

�ǥե���ȤǤϡ��ץ����֤�ͭ���ǤϤ���ޤ��󡣤��Τ��ᡢPostgreSQL�ǥץ����֤����ѤǤ���褦�ˤ��뤿���configure������ץȤ�����Ū�����ꤷ�ʤ���Фʤ�ޤ���DTrace���ݡ��Ȥ�ޤ��ˤϡ�configure��--enable-dtrace����ꤷ�ޤ����ܺ٤�項15.4�򻲾Ȥ��Ƥ���������

27.4.2. �Ȥ߹��ߺѤߤΥץ�����

表27-15�Ǽ������褦�ˡ�¿����ɸ��Ū�ʥץ����֤�����������������󶡤���Ƥ��ޤ���表27-16�ϥץ����֤ǻ��Ѥ��Ƥ��뷿�򼨤��Ƥ��ޤ����ޤ���PostgreSQL��βĴ�¬���򶯲����뤿��Υץ������ɲä���ǽ�Ǥ���

表 27-15. �Ȥ߹��ߺѤߤ�Dtrace�ץ�����

̾���ѥ�᡼������
transaction-start(LocalTransactionId)�������ȥ�󥶥������γ��Ϥ���ª����ץ����֡�arg0�ϥȥ�󥶥������ID�Ǥ���
transaction-commit(LocalTransactionId)�ȥ�󥶥����������ェλ����ª����ץ����֡�arg0�ϥȥ�󥶥������ID�Ǥ���
transaction-abort(LocalTransactionId)�ȥ�󥶥������ΰ۾ェλ����ª����ץ����֡�arg0�ϥȥ�󥶥������ID�Ǥ���
query-start(const char *)�䤤��碌�����γ��Ϥ���ª����ץ����֡�arg0���䤤��碌ʸ����Ǥ���
query-done(const char *)�䤤��碌���������ェλ����ª����ץ����֡�arg0���䤤��碌ʸ����Ǥ���
query-parse-start(const char *)�䤤��碌�Υѡ��������γ��Ϥ���ª����ץ����֡�arg0���䤤��碌ʸ����Ǥ���
query-parse-done(const char *)�䤤��碌�Υѡ������������ェλ����ª����ץ����֡�arg0���䤤��碌ʸ����Ǥ���
query-rewrite-start(const char *)�䤤��碌�ν񤭴��������γ��Ϥ���ª����ץ����֡�arg0���䤤��碌ʸ����Ǥ���
query-rewrite-done(const char *)�䤤��碌�ν񤭴������������ェλ����ª����ץ����֡�arg0���䤤��碌ʸ����Ǥ���
query-plan-start()�䤤��碌�Υץ��ʽ����γ��Ϥ���ª����ץ����֡�
query-plan-done()�䤤��碌�Υץ��ʽ��������ェλ����ª����ץ����֡�
query-execute-start()�䤤��碌�μ¹�(���������塼��)�����γ��Ϥ���ª����ץ����֡�
query-execute-done()�䤤��碌�μ¹�(���������塼��)���������ェλ����ª����ץ����֡�
statement-status(const char *)�����Хץ������ˤ��pg_stat_activity.status�ξ��֤ι�������ª����ץ����֡� arg0�Ͽ��������֤�ʸ����Ǥ���
checkpoint-start(int)�����å��ݥ���Ȥγ��Ϥ���ª����ץ����֤Ǥ���arg0�ϥ����å��ݥ���Ȥμ���ΰ㤤(shutdown��immediate��force)����̤��뤿��Υӥåȥե饰����äƤ��ޤ���
checkpoint-done(int, int, int, int, int)�����å��ݥ���Ȥ����ェλ����ª����ץ�����(�ʲ��˼����ץ����֤ϥ����å��ݥ���ȿʹԤ˽������֤���ª����ޤ��ˡ� arg0�Ͻ񤭹��ޤ줿�Хåե�����arg1�ϥХåե���������arg2��3��4�Ϥ��줾���ɲá�����������Ѥ��줿xlog�ο��Ǥ���
clog-checkpoint-start(bool)CLOG��ʬ�Υ����å��ݥ���Ȥγ��Ϥ���ª����ץ����֡�arg0��true�ʤ���̾�Υ����å��ݥ���ȤǤ��ꡢfalse�ʤ�Х���åȥ�������Υ����å��ݥ���Ȥ򼨤��ޤ���
clog-checkpoint-done(bool)CLOG��ʬ�Υ����å��ݥ���Ȥ����ェλ����ª����ץ����֡�arg0��clog-checkpoint-start��Ʊ����̣������ޤ���
subtrans-checkpoint-start(bool)���֥ȥ�󥶥��������ʬ�Υ����å��ݥ���Ȥγ��Ϥ���ª����ץ����֡�arg0��true�ʤ���̾�Υ����å��ݥ���ȤǤ��ꡢfalse�ʤ�Х���åȥ�������Υ����å��ݥ���Ȥ򼨤��ޤ���
subtrans-checkpoint-done(bool)���֥ȥ�󥶥��������ʬ�Υ����å��ݥ���Ȥ����ェλ����ª����ץ����֡�arg0��subtrans-checkpoint-start��Ʊ����̣������ޤ���
multixact-checkpoint-start(bool)�ޥ���ȥ�󥶥��������ʬ�Υ����å��ݥ���Ȥγ��Ϥ���ª����ץ����֡�arg0��true�ʤ���̾�Υ����å��ݥ���ȤǤ��ꡢfalse�ʤ�Х���åȥ�������Υ����å��ݥ���Ȥ򼨤��ޤ���
multixact-checkpoint-done(bool)�ޥ���ȥ�󥶥��������ʬ�Υ����å��ݥ���Ȥ����ェλ����ª����ץ����֡�arg0��multixact-checkpoint-start��Ʊ����̣������ޤ���
buffer-checkpoint-start(int)�����å��ݥ���ȤΥХåե��񤭹�����ʬ�γ��Ϥ���ª����ץ����֡�arg0�ϥ����å��ݥ���Ȥμ���ΰ㤤(shutdown��immediate��force)����̤��뤿��Υӥåȥե饰����äƤ��ޤ���
buffer-sync-start(int, int)�����å��ݥ������Υ����ƥ��Хåե��ν񤭽Ф����Ϥ���ª����ץ�����(�ɤΥХåե����񤭽Ф�ɬ�פ�����Τ���Ƚ�ꤷ����Ǥ�)��arg0�ϥХåե��������ǡ�arg1�ϸ��ߥ����ƥ��Ǥ��ꡢ�񤭽Ф�ɬ�פΤ���Хåե����Ǥ���
buffer-sync-written(int)�����å��ݥ������Τ��줾��ΥХåե���񤭽Ф������ª����ץ����֡�arg0�ϥХåե���ID�򼨤��ޤ���
buffer-sync-done(int, int, int)���ƤΥ����ƥ��Хåե��ν񤭽Ф������ª����ץ����֡�arg0�ϥХåե��������Ǥ���arg1�ϥ����å��ݥ���Ƚ����ˤ��ºݤ˽񤭽Ф��줿�Хåե����Ǥ���arg2�Ͻ񤭽Ф����Ǥ������ȸ��Ѥ��줿�Хåե���(buffer-sync-start��arg1����)�Ǥ������ΰ㤤�ϥ����å��ݥ�������¾�Υץ������ˤ��񤭽Ф��줿�Хåե�ʬ�Ǥ���
buffer-checkpoint-sync-start()�����ͥ�ؤΥ����ƥ��Хåե��ν񤭽Ф�����ȯ�Ԥθ塢������Ʊ���񤭽Ф��׵�򳫻Ϥ���������ª����ץ����֡�
buffer-checkpoint-done()�Хåե�����ǥ������ؤ�Ʊ���񤭽Ф������ν�λ����ª����ץ����֡�
twophase-checkpoint-start()���ꥳ�ߥå���ʬ�Υ����å��ݥ���Ȥγ��Ϥ���ª����ץ����֡�
twophase-checkpoint-done()���ꥳ�ߥå���ʬ�Υ����å��ݥ���Ȥ����ェλ����ª����ץ����֡�
buffer-read-start(ForkNumber, BlockNumber, Oid, Oid, Oid, int, bool) �Хåե��ɤ߹��ߤγ��Ϥ���ª����ץ����֡�arg0�Ϥ�arg1���ɤ߹��ߥڡ����Υե������ֹ�ȥ֥��å��ֹ�Ǥ�(����������졼�����γ�ĥ�׵᤬���ä���硢arg1��-1�ˤʤ�Ǥ��礦)�� arg2��arg3��arg4���оݤΥ�졼�������̤���ơ��֥���֡��ǡ����١����������ƥ�졼������OID�Ǥ��� arg5�ϰ���ơ��֥���������Хåե��˺������Ƥ���Ф��ΥХå�����ɤ�ID�Ǥ��ꡢ̵���ʥХå������ID(-1)�Ǥ���϶�ͭ�Хåե���ؤ��ޤ��� arg6��true�ʤ�Х�졼�����γ�ĥ�׵ᡢfalse���̾���ɤ߹��ߤ򼨤��ޤ���
buffer-read-done(ForkNumber, BlockNumber, Oid, Oid, Oid, int, bool, bool)�Хåե��ɤ߹��ߤν�λ����ª����ץ����֡�arg0��arg1���ɤ߹��ߥڡ����Υե������ֹ�ȥ֥��å��ֹ�Ǥ�(�⤷��졼�����γ�ĥ�׵᤬���ä���硢arg1�Ͽ������ɲä��줿�֥��å����ֹ��ޤߤޤ�)�� arg2��arg3��arg4���оݤΥơ��֥���̤���ơ��֥���֡��ǡ����١����������ƥơ��֥��OID�Ǥ���arg5�ϰ���ơ��֥���������Хåե��˺������Ƥ���Ф��ΥХå�����ɤ�ID�Ǥ��ꡢ̵���ʥХå������ID(-1)�Ǥ���϶�ͭ�Хåե���ؤ��ޤ��� arg6��true�ʤ�Х�졼�����γ�ĥ�׵ᡢfalse���̾���ɤ߹��ߤ򼨤��ޤ���arg7��true�ʤ�ХХåե����ס�����ˤ��롢false�ϥס������̵���ä����Ȥ򼨤��ޤ���
buffer-flush-start(ForkNumber, BlockNumber, Oid, Oid, Oid)��ͭ�Хåե��ؤν񤭹����׵ᳫ�Ϥ���ª����ץ����֡�arg0��arg1�Ϥ��Υڡ����Υե������ֹ�ȥ֥��å��ֹ�Ǥ���arg2��arg3��arg4���оݤΥ�졼�������̤���ơ��֥���֡��ǡ����١����������ƥơ��֥��OID�Ǥ���
buffer-flush-done(ForkNumber, BlockNumber, Oid, Oid, Oid)�񤭹����׵�ν�λ����ª����ץ����֡�(����ϥ����ͥ�إǡ������Ϥ��������ߥ󥰤Τߤ�ȿ�Ǥ��Ƥ��뤳�Ȥ����դ��Ƥ�������; ���񡢤��λ����ǤϤޤ��ºݤ˥ǥ������ؽ񤭹��ޤ�Ƥ��ޤ���)������buffer-flush-start��Ʊ���Ǥ���
buffer-write-dirty-start(ForkNumber, BlockNumber, Oid, Oid, Oid)�����Хץ������ˤ������ƥ��Хåե��ν񤭽Ф����Ϥ���ª����ץ����֡�(�⤷���줬��ȯ����褦�Ǥ����顢shared_buffers�����ʲ᤮�뤫���Хå����饦��ɥ饤������Υѥ�᡼����Ĵ�᤬ɬ�פʤ��Ȥ��̣���ޤ���)arg0��arg1�Ϥ��Υڡ����Υե������ֹ�ȥ֥��å��ֹ�Ǥ���arg2��arg3��arg4���оݤΥ�졼�������̤���ơ��֥���֡��ǡ����١����������ƥ�졼������OID�Ǥ���
buffer-write-dirty-done(ForkNumber, BlockNumber, Oid, Oid, Oid)�����ƥ��Хåե��ν񤭽Ф��ν�λ����ª����ץ����֤Ǥ���������buffer-write-dirty-start��Ʊ���Ǥ���
wal-buffer-write-dirty-start()WAL�Хåե��ΰ����­�ˤ�륵���Хץ������Υ����ƥ���WAL�Хåե���񤭽Ф�����ª����ץ����֡�(�⤷���줬��ȯ����褦�Ǥ����顢wal_buffers�����������뤳�Ȥ��̣���ޤ���)
wal-buffer-write-dirty-done()�����ƥ���WAL�Хåե��ν񤭽Ф���λ����ª����ץ����֡�
xlog-insert(unsigned char, unsigned char)WAL�쥳���ɤ���������ª����ץ����֡�arg0�ϥ쥳���ɤΥ꥽�����ޥ͡�����(rmid)�Ǥ���arg1�Ͼ���ե饰�Ǥ���
xlog-switch()WAL�������ȤΥ����å��׵����ª����ץ����֤Ǥ���
smgr-md-read-start(ForkNumber, BlockNumber, Oid, Oid, Oid, int)��졼����󤫤�Υ֥��å��ɤ߹��ߤγ��Ϥ���ª����ץ����֡�arg0��arg1�Ϥ��Υڡ����Υե������ֹ�ȥ֥��å��ֹ�Ǥ���arg2��arg3��arg4���оݤΥ�졼�������̤���ơ��֥���֡��ǡ����١����������ƥ�졼������OID�Ǥ���arg5�ϰ���ơ��֥���������Хåե��˺������Ƥ���Ф��ΥХå�����ɤ�ID�Ǥ��ꡢ̵���ʥХå������ID(-1)�Ǥ���϶�ͭ�Хåե���ؤ��ޤ���
smgr-md-read-done(ForkNumber, BlockNumber, Oid, Oid, Oid, int, int, int)�֥��å����ɤ߹��߽�λ����ª����ץ����֡�arg0��arg1�Ϥ��Υڡ����Υե������ֹ�ȥ֥��å��ֹ�Ǥ���arg2��arg3��arg4���оݤΥ�졼�������̤���ơ��֥���֡��ǡ����١����������ƥ�졼������OID�Ǥ���arg5�ϰ���ơ��֥���������Хåե��˺������Ƥ���Ф��ΥХå�����ɤ�ID�Ǥ��ꡢ̵���ʥХå������ID(-1)�Ǥ���϶�ͭ�Хåե���ؤ��ޤ���arg6�ϼºݤ��ɤ߹�����Х��ȿ���arg7�ϥꥯ�����Ȥ��줿�ɤ߹��ߥХ��ȿ��Ǥ�(�⤷�������˺��ۤ����ä���硢���餫�����꤬���뤳�Ȥ򼨤��ޤ�)��
smgr-md-write-start(ForkNumber, BlockNumber, Oid, Oid, Oid, int)��졼�����ؤΥ֥��å��񤭽Ф��γ��Ϥ���ª����ץ����֡�arg0��arg1�Ϥ��Υڡ����Υե������ֹ�ȥ֥��å��ֹ�Ǥ���arg2��arg3��arg4���оݤΥ�졼�������̤���ơ��֥���֡��ǡ����١����������ƥ�졼������OID�Ǥ���arg5�ϰ���ơ��֥���������Хåե��˺������Ƥ���Ф��ΥХå�����ɤ�ID�Ǥ��ꡢ̵���ʥХå������ID(-1)�Ǥ���϶�ͭ�Хåե���ؤ��ޤ���
smgr-md-write-done(ForkNumber, BlockNumber, Oid, Oid, Oid, int, int, int)�֥��å��ν񤭽Ф���λ����ª����ץ����֡�arg0��arg1�Ϥ��Υڡ����Υե������ֹ�ȥ֥��å��ֹ�Ǥ���arg2��arg3��arg4���оݤΥ�졼�������̤���ơ��֥���֡��ǡ����١����������ƥ�졼������OID�Ǥ���arg5�ϰ���ơ��֥���������Хåե��˺������Ƥ���Ф��ΥХå�����ɤ�ID�Ǥ��ꡢ̵���ʥХå������ID(-1)�Ǥ���϶�ͭ�Хåե���ؤ��ޤ���arg6�ϼºݤ˽񤭽Ф����Х��ȿ���arg7�ϥꥯ�����Ȥ��줿�񤭽Ф��Х��ȿ��Ǥ�(�⤷�������˺��ۤ����ä���硢���餫�����꤬���뤳�Ȥ򼨤��ޤ�)��
sort-start(int, bool, int, int, bool)�����Ƚ����γ��Ϥ���ª����ץ����֡�arg0���оݥǡ������ҡ��ס�����ǥå������ޤ���datum�Τɤ줫�򼨤��ޤ���arg1��true�ʤ�а������ɬ�פȤ��Ƥ��뤳�Ȥ򼨤��ޤ���arg2�ϥ����Υ������Ǥ���arg3�ϵ��Ƥ���Ƥ����ȥ���(work_mem)�Υ����Х��ȿ��Ǥ���arg4��true�ʤ�Х����ȷ�̤��Ф�������ॢ���������׵ᤵ��Ƥ��뤳�Ȥ򼨤��ޤ���
sort-done(bool, long)�����Ƚ����ν�λ����ª����ץ����֡�arg0��true�ʤ�г��������ȡ�false�����������Ȥ򼨤��ޤ���arg1�ϳ��������Ȥǻ��Ѥ��줿�ǥ������֥��å������⤷�������������Ȥǻ��Ѥ��줿���꡼�Υ����Х��ȿ��򼨤��ޤ���
lwlock-acquire(LWLockId, LWLockMode)LWLock(���̥��å�)�μ�������ª����ץ����֡�arg0�Ϸ��̥��å���ID�򼨤��ޤ���arg1���׵ᤵ�줿���å��⡼��(��¾���⤷���϶�ͭ)�򼨤��ޤ���
lwlock-release(LWLockId)���̥��å��γ�������ª����ץ�����(�������������Ԥ��Υץ������Ϥޤ����Υ��å�������Ǥ��ʤ����Ȥ����դ��Ʋ�����)��arg0�Ϸ��̥��å���ID�򼨤��ޤ���
lwlock-wait-start(LWLockId, LWLockMode)���̥��å���¨�¤˼����Ǥ��ʤ��ä����ᡢ�����Хץ����������å������ѤǤ���ޤǥ��å��Ե����֤ˤʤä��ݤγ��Ϥ���ª����ץ����֡�arg0�Ϸ��̥��å���ID�򼨤��ޤ���arg1���׵ᤵ�줿���å��⡼��(��¾���⤷���϶�ͭ)�򼨤��ޤ���
lwlock-wait-done(LWLockId, LWLockMode)�����Хץ������η��̥��å��Ե��γ�������ª����ץ�����(�ºݤˤϤޤ����å��ϼ������Ƥ��ޤ���)��arg0�Ϸ��̥��å���ID�򼨤��ޤ���arg1���׵ᤵ�줿���å��⡼��(��¾���⤷���϶�ͭ)�򼨤��ޤ���
lwlock-condacquire(LWLockId, LWLockMode)�ƤӽФ������Ե����ʤ����Ȥ���ꤷ���ݤΡ����̥��å��γ�����������ª����ץ����֡�arg0�Ϸ��̥��å���ID�򼨤��ޤ���arg1���׵ᤵ�줿���å��⡼��(��¾���⤷���϶�ͭ)�򼨤��ޤ���
lwlock-condacquire-fail(LWLockId, LWLockMode)�ƤӽФ������Ե����ʤ����Ȥ���ꤷ���ݤΡ����̥��å��γ������Ԥ���ª����ץ����֡�arg0�Ϸ��̥��å���ID�򼨤��ޤ���arg1���׵ᤵ�줿���å��⡼��(��¾���⤷���϶�ͭ)�򼨤��ޤ���
lock-wait-start(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, LOCKMODE)�̾�Υ��å�(lmgr lock)��¨�¤˼����Ǥ��ʤ��ä����ᡢ�����Хץ����������å������ѤǤ���ޤǥ��å��Ԥ����֤ˤʤä��ݤγ��Ϥ���ª����ץ����֡�arg0����arg3�ϥ��å����줿���֥������Ȥμ����ѥ����ΰ�Ǥ���arg4�ϥ��å����줿���֥������ȤΥ����פ򼨤��ޤ���arg5���׵ᤵ�줿���å��μ���򼨤��ޤ���
lock-wait-done(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, LOCKMODE)�̾�Υ��å�(lmgr lock)�׵���Ե���λ����ª����ץ�����(�Ĥޤ���å����������)�� ������lock-wait-start��Ʊ���Ǥ���
deadlock-found()�ǥåɥ��å����δ�ˤ��ǥåɥ��å���ȯ������ª����ץ����֡�

表 27-16. �ץ����֥ѥ�᡼���ǻȤ��뷿�����

�����
LocalTransactionIdunsigned int
LWLockIdint
LWLockModeint
LOCKMODEint
BlockNumberunsigned int
Oidunsigned int
ForkNumberint
boolchar

27.4.3. �ץ����֤�����

�ʲ�����Ǥϡ������ƥ�ˤ�����ȥ�󥶥�����������Ϥ���DTrace������ץȤ򼨤��ޤ�����ǽ������pg_stat_database�Υ��ʥåץ���åȤ��뤳�Ȥ����ز�ǽ�Ǥ���

#!/usr/sbin/dtrace -qs

postgresql$1:::transaction-start
{
      @start["Start"] = count();
      self->ts  = timestamp;
}

postgresql$1:::transaction-abort
{
      @abort["Abort"] = count();
}

postgresql$1:::transaction-commit
/self->ts/
{
      @commit["Commit"] = count();
      @time["Total time (ns)"] = sum(timestamp - self->ts);
      self->ts=0;
}

�¹Ԥ���ȡ����D������ץȤϰʲ��Τ褦�ʽ��Ϥ򤷤ޤ���

# ./txn_count.d `pgrep -n postgres` or ./txn_count.d <PID>
^C

Start                                          71
Commit                                         70
Total time (ns)                        2312105013

注意: ���ܤȤʤ����ץݥ���Ȥθߴ����Ϥ���ޤ�����SystemTap��DTrace�Ȱۤʤ����ץ�����ץȤ�ɽ�����Ѥ��ޤ��� ɽ���˴ؤ����ä����դ��٤����Ȥ��ơ�SystemTap�Ǥϻ��Ȥ������ץݥ����̾�Υϥ��ե���������ŤΥ���������������Ѥ���ɬ�פ�����ޤ��� ����Ͼ���Ū��SystemTap�Υ�꡼���ǽ�������뤳�Ȥ���Ԥ��Ƥ��ޤ���

DTrace������ץȤκ����ˤ����դ�ɬ�פǤ��ꡢ�ǥХå���ɬ�פǤ��뤳�Ȥ�˺��ʤ��Ǥ�������������ʤ��ȡ�������������׾���ΰ�̣���ʤ��ʤ뤫�⤷��ޤ��󡣤ۤȤ�ɤξ�硢���Ĥ�������ϥ����ƥ�ǤϤʤ�������ˡ�δְ㤤�Ǥ���ưŪ���פ���Ѥ��Ƹ��Ĥ��ä�����˴ؤ��Ƶ�����Ԥ��ݤˤϡ�������ץȤθ����������Ǥ���褦�˥�����ץȤ�ޤ��褦�ˤ��Ƥ���������

�����¿���Υ���ץ륹����ץȤ�PgFoundry��dtrace project�ˤ���ޤ���

27.4.4. �����ץ����֤����

��ȯ�Ԥ�˾��Х�������˿������ץ����֤�������뤳�Ȥ��Ǥ��ޤ���������������ˤϺƥ���ѥ��뤬ɬ�פǤ��������ϡ������ץ����֤�����μ��Ǥ���

  1. �ץ����֤�̾���ȥץ����֤ν������̤��Ƽ�����ǽ�Ȥ���ǡ�������ޤ�

  2. src/backend/utils/probes.d�˥ץ����֤�������ɲä��ޤ�

  3. �⤷���ץ����֥ݥ���Ȥ�ޤ�⥸�塼�뤬pg_trace.h�򥤥󥯥롼�ɤ��Ƥʤ���Ф���򥤥󥯥롼�ɤ�����������������Υץ����֤�Ԥ���������TRACE_POSTGRESQL�ޥ������������ޤ�

  4. �ƥ���ѥ����Ԥ��������ץ����֤����ѤǤ��뤫��ǧ���ޤ�

��: ����ϥȥ�󥶥������ID���Ѥ��ƿ����ȥ�󥶥����������פ���ץ������ɲäλ�������Ǥ���

  1. �ץ�����̾��transaction-start�Ȥ����ѥ�᡼���Ȥ���LocalTransactionId����ɬ�פȤ��뤳�Ȥ���ޤ�

  2. src/backend/utils/probes.d�˥ץ����֤�������ɲä��ޤ�:

          probe transaction__start(LocalTransactionId);

    �ץ�����̾����ŤΥ����������������Ѥ���������դ��Ʋ�������DTrace������ץȤǥץ����֤��Ѥ����硢��ŤΥ��������������ϥ��ե���֤�������ɬ�פ�����ޤ������Τ��ᡢtransaction-start���桼��������ʸ��˵��ܤ����̾���Ȥʤ�ޤ���

  3. ����ѥ�����ˡ�transaction__start��TRACE_POSTGRESQL_TRANSACTION_START�ȸƤФ��ޥ������Ѵ�����ޤ�(�����Ǥϥ�������������ϤҤȤĤˤʤ�ޤ�)�����Υޥ����ϡ�pg_trace.h�򥤥󥯥롼�ɤ��뤳�Ȥˤ����Ѳ�ǽ�Ȥʤ�ޤ������Υޥ����򥽡������������Ŭ�ڤʲս���ɲä��Ƥ����ޤ������ξ�硢�ʲ����ͤˤʤ�ޤ���

        TRACE_POSTGRESQL_TRANSACTION_START(vxid.localTransactionId);

  4. �ƥ���ѥ����˿������Х��ʥ�ǥ����Ф�ư�����������ͤ�DTrace���ޥ�ɤμ¹Ԥˤ�꿷�����ɲä����ץ����֤����Ѳ�ǽ�ʥ����å����ޤ����������ͤʽ��Ϥ���ǧ�Ǥ���Ϥ��Ǥ�:

    # dtrace -ln transaction-start
       ID    PROVIDER          MODULE           FUNCTION NAME
    18705 postgresql49878     postgres     StartTransactionCommand transaction-start
    18755 postgresql49877     postgres     StartTransactionCommand transaction-start
    18805 postgresql49876     postgres     StartTransactionCommand transaction-start
    18855 postgresql49875     postgres     StartTransactionCommand transaction-start
    18986 postgresql49873     postgres     StartTransactionCommand transaction-start

C�Υ����������ɤ������ѤΥޥ������ɲä���ݡ������Ĥ���������������ޤ�: