YugabyteDB tserver에서 짧은 스택을 빠르게 가져옵니다.
13657 단어 sqldatabaseyugabytedbdistributed
:9000/threadz
. 다음은 60초 동안 샘플링하고 yb::tserver::PerformRead
에서 rocksdb::DBIter::Seek()
까지의 호출만 유지하고 각각에 대한 샘플 수와 함께 다른 코드 경로를 표시하는 빠른 스크립트입니다.end=$(( $SECONDS + 60 ))
while [ $SECONDS -lt $end ]
do
curl -Ls http://$(hostname):9000/threadz?group=rpc_thread_pool | awk '
/rocksdb::DBIter::Seek/,/yb::tserver::PerformRead/{
sub(/^.* 0x[^ ]+ */,"")
sub(/[<][/].*/,"")
stack=$0" @ "stack
}/Total number of threads/ && stack!=""{
#print NF" samples of:\t"stack
samples[stack]=samples[stack]+NF
stack=""
}
END{
for (i in samples) print samples[i]" samples of: @ "i
}'
done | sort -n | uniq -c | awk '
{ $1=$1+$2;$2="" ; print }
' | sort -n | sed -e 's/ @/\n/g'
Index Scan Backwards에 대한 이전 블로그 게시물과 동일한 실행에 대한 출력은 다른
PerformRocksDBSeek
호출을 보여줍니다.9 samples of:
yb::tserver::PerformRead()
yb::tserver::(anonymous namespace)::ReadQuery::Complete()
yb::tablet::Tablet::HandlePgsqlReadRequest()
yb::tablet::AbstractTablet::ProcessPgsqlReadRequest()
yb::docdb::PgsqlReadOperation::Execute()
yb::docdb::PgsqlReadOperation::ExecuteScalar()
yb::docdb::(anonymous namespace)::CreateIterator()
yb::docdb::QLRocksDBStorage::GetIterator()
yb::docdb::DocRowwiseIterator::Init()
yb::docdb::IntentAwareIterator::PreparePrev()
yb::docdb::PerformRocksDBSeek()
rocksdb::DBIter::Seek()
30 samples of:
yb::tserver::PerformRead()
yb::tserver::(anonymous namespace)::ReadQuery::Complete()
yb::tablet::Tablet::HandlePgsqlReadRequest()
yb::tablet::AbstractTablet::ProcessPgsqlReadRequest()
yb::docdb::PgsqlReadOperation::Execute()
yb::docdb::PgsqlReadOperation::ExecuteScalar()
yb::docdb::DocRowwiseIterator::HasNext()
yb::docdb::DocDBTableReader::Get()
yb::docdb::IntentAwareIterator::SeekForward()
yb::docdb::IntentAwareIterator::SeekForwardRegular()
yb::docdb::PerformRocksDBSeek()
rocksdb::DBIter::Seek()
61 samples of:
yb::tserver::PerformRead()
yb::tserver::(anonymous namespace)::ReadQuery::Complete()
yb::tablet::Tablet::HandlePgsqlReadRequest()
yb::tablet::AbstractTablet::ProcessPgsqlReadRequest()
yb::docdb::PgsqlReadOperation::Execute()
yb::docdb::PgsqlReadOperation::ExecuteScalar()
yb::docdb::DocRowwiseIterator::HasNext()
yb::docdb::DocRowwiseIterator::AdvanceIteratorToNextDesiredRow()
yb::docdb::IntentAwareIterator::SeekToLatestDocKeyInternal()
yb::docdb::IntentAwareIterator::Seek()
yb::docdb::PerformRocksDBSeek()
rocksdb::DBIter::Seek()
72 samples of:
yb::tserver::PerformRead()
yb::tserver::(anonymous namespace)::ReadQuery::Complete()
yb::tablet::Tablet::HandlePgsqlReadRequest()
yb::tablet::AbstractTablet::ProcessPgsqlReadRequest()
yb::docdb::PgsqlReadOperation::Execute()
yb::docdb::PgsqlReadOperation::ExecuteScalar()
yb::docdb::DocRowwiseIterator::HasNext()
yb::docdb::DocRowwiseIterator::AdvanceIteratorToNextDesiredRow()
yb::docdb::IntentAwareIterator::PreparePrev()
yb::docdb::PerformRocksDBSeek()
rocksdb::DBIter::Seek()
이 예에서는 yb::tserver::PerformRead()에서 제공하고
rocksdb_number_db_seek
에서 증가하는 rocksdb::DBIter::Seek()에서 읽기(Index Scan Backward가 있는 SELECT)를 실행하고 있었습니다. 이것이 제가 이러한 탐색으로 가는 스택에 관심을 갖게 된 이유입니다. 이 짧은 샘플에서 나는 행당 2개의 검색에 대한 이유를 볼 수 있습니다. 하나는 이전 키로 이동하는 것이고AdvanceIteratorToNextDesiredRow
다른 하나는 올바른 읽기 시간으로 이동하는 것입니다.
Reference
이 문제에 관하여(YugabyteDB tserver에서 짧은 스택을 빠르게 가져옵니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/yugabyte/quickly-get-short-stack-from-a-yugabytedb-tserver-2j03텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)