[ https://issues.apache.org/jira/browse/PHOENIX-1115?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14323151#comment-14323151 ]
James Taylor commented on PHOENIX-1115: --------------------------------------- Thanks for the patch, [~rajeshbabu]. Here's some feedback: - Rather than surfacing this through an ALTER SESSION command, how about a TRACE ON/OFF command. It'll be similar in terms of implementation, but instead of treating this as a mutate statement, treat it as a query. It'll return one row with a single TRACE_ID BIGINT column value. That way, when invoked from sqlline, it'll print out the trace ID (as if it was a SELECT statement), and when invoked programmatically (i.e. hopefully someone will build a tool for this), then you could do a resultSet.getLong(1) to get the top level trace ID. The other advantage of having a specific command for it is that we can add various options and it'll fail if the user gets them wrong. - Rather than write some relatively hacky print out code (which is after all just a nearly unusable way of visualizing the trace info), we can surface this similar to the way MySQL does: allow people to query the SYSTEM.TRACE table directly (or provide a simple VIEW on top named INFORMATION_SCHEMA.OPTIMIZER_TRACE which might be even better, though fixing PHOENIX-1507 might be a prereq). That way, we don't have to support other tracing output options, as the user can take advantage of sqlline being able to output query results in CSV format (if they want to export the trace information for visualization in Excel or some other tool, for example). On our website, we'll document a few canned queries to get the user started: {code} SELECT description, hostname, start_time, end_time - start_time duration FROM SYSTEM.TRACING WHERE trace_id = <your trace id> ORDER BY start_time; -- Select trace ID of last SQL statement -- TODO: Verify this SELECT trace_id, description FROM SYSTEM.TRACING WHERE parent_id = <your trace id> ORDER BY trace_id DESC LIMIT 1; -- Select 10 longest running operations for a given trace -- TODO: Try grouping by SPAN_ID instead and select MAX(description) -- as it's likely the same and will be more efficient. SELECT hostname, description, MAX(start_time - end_time) FROM SYSTEM.TRACING WHERE trace_id = <your trace id> GROUP BY hostname, description ORDER BY MAX(start_time - end_time) LIMIT 10; {code} - Is the code below to group all batched Put mutations info a single span, and if so, can we just always do this (but without the instanceof and check for Sampler.ALWAYS), as there's no harm in doing this, right? {code} @@ -186,6 +194,7 @@ public class PhoenixStatement implements Statement, SQLCloseable, org.apache.pho private int maxRows; private int fetchSize = -1; private int queryTimeout; + private TraceScope trace = null; public PhoenixStatement(PhoenixConnection connection) { this.connection = connection; @@ -267,6 +276,14 @@ public class PhoenixStatement implements Statement, SQLCloseable, org.apache.pho build().buildException(); } try { + if (connection.isSqlTraceOn() && connection.getAutoCommit() + && connection.getSampler().equals(Sampler.ALWAYS) + && !(stmt instanceof AlterSessionStatement)) { + if(trace == null) { + TraceScope scope = Tracing.startNewSpan(connection, "Executing mutation statement"); + trace = scope; + } + } return CallRunner .run( new CallRunner.CallableThrowable<Integer, SQLException>() { {code} > Provide a SQL command to turn tracing on/off > -------------------------------------------- > > Key: PHOENIX-1115 > URL: https://issues.apache.org/jira/browse/PHOENIX-1115 > Project: Phoenix > Issue Type: Sub-task > Affects Versions: 5.0.0, 4.1 > Reporter: James Taylor > Assignee: Rajeshbabu Chintaguntla > Attachments: PHOENIX-1115.patch, PHOENIX-1115_v2.patch, Screen Shot > 2014-11-21 at 3.41.41 PM.png, tracing_in_different_rdbms.pdf > > > Provide a SQL command that turns tracing on and off. For example, Oracle has > this: > {code} > ALTER SESSION SET sql_trace = true; > ALTER SESSION SET sql_trace = false; > {code} > We might consider allowing the sampling rate to be set as well. -- This message was sent by Atlassian JIRA (v6.3.4#6332)