Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tikv: log slow coprocessor task in detail #6344

Merged
merged 12 commits into from
Apr 26, 2018

Conversation

coocood
Copy link
Member

@coocood coocood commented Apr 23, 2018

Add transaction startTS, storeAddr, ExecDetail to the log to make debug easier.

Add transaction startTS, storeAddr, ExecDetail to the log to make debug easier.
@coocood
Copy link
Member Author

coocood commented Apr 23, 2018

@zz-jason @shenli PTAL

)

func (worker *copIteratorWorker) logTimeCopTask(costTime time.Duration, task *copTask, bo *Backoffer, resp *tikvrpc.Response) {
logStr := fmt.Sprintf("[TIME_COP_TASK] cop_resp_time:%s, cop_start_ts:%d, cop_region_id:%d, cop_store_addr:%s", costTime, worker.req.StartTs, task.region.id, task.storeAddr)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add time unit for the cop_resp_time.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's time.Duration type, which unit is included.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

s/cop_start_ts/txnID/ ?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we don't need to print the 'cop_' prefix

@shenli
Copy link
Member

shenli commented Apr 23, 2018

@AndreMouche PTAL

Copy link
Contributor

@AndreMouche AndreMouche left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

)

func (worker *copIteratorWorker) logTimeCopTask(costTime time.Duration, task *copTask, bo *Backoffer, resp *tikvrpc.Response) {
logStr := fmt.Sprintf("[TIME_COP_TASK] cop_resp_time:%s, cop_start_ts:%d, cop_region_id:%d, cop_store_addr:%s", costTime, worker.req.StartTs, task.region.id, task.storeAddr)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

s/cop_start_ts/txnID/ ?

)

func (worker *copIteratorWorker) logTimeCopTask(costTime time.Duration, task *copTask, bo *Backoffer, resp *tikvrpc.Response) {
logStr := fmt.Sprintf("[TIME_COP_TASK] cop_resp_time:%s, cop_start_ts:%d, cop_region_id:%d, cop_store_addr:%s", costTime, worker.req.StartTs, task.region.id, task.storeAddr)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we don't need to print the 'cop_' prefix

if detail.HandleTime != nil {
processMs := detail.HandleTime.ProcessMs
waitMs := detail.HandleTime.WaitMs
if processMs > minLogKVProcessTime {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@AndreMouche Does coprocessor also has a threshold to fill HandleTime.ProcessMs and HandleTime.WaitMs for slow cop requests ?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

YES

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@coocood Maybe we just need to print HandleTime.ProcessMs and HandleTime.WaitMs once they are set, no need to use another thresholds like minLogKVProcessTime and minLogKVWaitTime

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After we set the HandleTime and ScanDetial to true, every request will return them.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When will we set ScanDetail to true ? @coocood

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ScanDetail is not set to true now. it's set only when the duration exceeds the threshold(1s) in TiKV.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I still think we should remove these minXXXX thresholds defined in this file and do not check them.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TiDB should control what to log, without depending on TiKV's implementation.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@zz-jason If we log everything, the most important ones will be obscure.

@coocood
Copy link
Member Author

coocood commented Apr 23, 2018

@zz-jason PTAL

@coocood
Copy link
Member Author

coocood commented Apr 23, 2018

/run-all-tests

@shenli shenli added all-tests-passed status/LGT1 Indicates that a PR has LGTM 1. labels Apr 23, 2018
@coocood
Copy link
Member Author

coocood commented Apr 24, 2018

@zz-jason @AndreMouche PTAL

@coocood coocood added this to the 2.0 milestone Apr 24, 2018
Copy link
Contributor

@AndreMouche AndreMouche left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rest LGTM

} else {
detail = resp.Cop.ExecDetails
}
if detail != nil {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are so many if in if.. Could we log.Info through defer function, and return directly if detail==nil?

Copy link
Member Author

@coocood coocood Apr 25, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think defer is used for release resource.
It looks weird if the normal execution code is done in defer.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agree with Yuxing.

@coocood
Copy link
Member Author

coocood commented Apr 25, 2018

@shenli PTAL

@coocood coocood added the priority/release-blocker This issue blocks a release. Please solve it ASAP. label Apr 25, 2018
@@ -604,21 +605,22 @@ func (worker *copIteratorWorker) handleTaskOnce(bo *Backoffer, task *copTask, ch
IsolationLevel: pbIsolationLevel(worker.req.IsolationLevel),
Priority: kvPriorityToCommandPri(worker.req.Priority),
NotFillCache: worker.req.NotFillCache,
HandleTime: true,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel like "EnableHandleTime" is better.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is defined in protobuf, hard to change.


func appendScanDetail(logStr string, columnFamily string, scanInfo *kvrpcpb.ScanInfo) string {
if scanInfo != nil {
if scanInfo.Total > minLogScanTotalInfo {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why we need to check this?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should not log messages that is not interesting.

@shenli
Copy link
Member

shenli commented Apr 26, 2018

LGTM

@coocood coocood merged commit 3ae0125 into pingcap:master Apr 26, 2018
@coocood coocood deleted the log-cop-resp-detail branch April 26, 2018 08:00
coocood added a commit to coocood/tidb that referenced this pull request Apr 26, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
priority/release-blocker This issue blocks a release. Please solve it ASAP. status/LGT1 Indicates that a PR has LGTM 1.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants