Performance issues
There is a number of steps you can take to investigate and troubleshoot the performance of your YugabyteDB clusters.
Files on a YugabyteDB cluster
Learning about the default locations of files on a YugabyteDB cluster can help with troubleshooting the cluster performance issues.
Note that the following locations are applicable to clusters installed via YugabyteDB Anywhere.
YugabyteDB software and binary files
The software packages are symlinked at /home/yugabyte/{master|tserver}
.
Note that YB-Master and YB-TServer may be different versions of the software (for example, this could be a result of rolling software upgrades).
For example, to learn file locations on YB-Master, execute the following command:
ls -lrt /home/yugabyte/master
Expect an output similar to the following:
total 4
lrwxrwxrwx. 1 yugabyte yugabyte 27 Jan 15 19:27 logs -> /mnt/d0/yb-data/master/logs
lrwxrwxrwx. 1 yugabyte yugabyte 66 Jan 15 19:28 bin -> /home/yugabyte/yb-software/yugabyte-2.5.1.0-b187-centos-x86_64/bin
lrwxrwxrwx. 1 yugabyte yugabyte 66 Jan 15 19:28 lib -> /home/yugabyte/yb-software/yugabyte-2.5.1.0-b187-centos-x86_64/lib
lrwxrwxrwx. 1 yugabyte yugabyte 72 Jan 15 19:28 linuxbrew -> /home/yugabyte/yb-software/yugabyte-2.5.1.0-b187-centos-x86_64/linuxbrew
lrwxrwxrwx. 1 yugabyte yugabyte 85 Jan 15 19:28 linuxbrew-xxxxxxxxxxxx -> /home/yugabyte/yb-software/yugabyte-2.5.1.0-b187-centos-x86_64/linuxbrew-xxxxxxxxxxxx
lrwxrwxrwx. 1 yugabyte yugabyte 71 Jan 15 19:28 postgres -> /home/yugabyte/yb-software/yugabyte-2.5.1.0-b187-centos-x86_64/postgres
lrwxrwxrwx. 1 yugabyte yugabyte 68 Jan 15 19:28 pylib -> /home/yugabyte/yb-software/yugabyte-2.5.1.0-b187-centos-x86_64/pylib
lrwxrwxrwx. 1 yugabyte yugabyte 68 Jan 15 19:28 share -> /home/yugabyte/yb-software/yugabyte-2.5.1.0-b187-centos-x86_64/share
lrwxrwxrwx. 1 yugabyte yugabyte 68 Jan 15 19:28 tools -> /home/yugabyte/yb-software/yugabyte-2.5.1.0-b187-centos-x86_64/tools
lrwxrwxrwx. 1 yugabyte yugabyte 65 Jan 15 19:28 ui -> /home/yugabyte/yb-software/yugabyte-2.5.1.0-b187-centos-x86_64/ui
lrwxrwxrwx. 1 yugabyte yugabyte 84 Jan 15 19:28 version_metadata.json -> /home/yugabyte/yb-software/yugabyte-2.5.1.0-b187-centos-x86_64/version_metadata.json
lrwxrwxrwx. 1 yugabyte yugabyte 66 Jan 15 19:28 www -> /home/yugabyte/yb-software/yugabyte-2.5.1.0-b187-centos-x86_64/www
-rw-rw-r--. 1 yugabyte yugabyte 0 Jan 15 19:29 master.out
-rw-rw-r--. 1 yugabyte yugabyte 2200 Jan 15 20:18 master.err
drwxr-xr-x. 2 yugabyte yugabyte 25 Jan 15 20:18 conf
Configuration files
Configuration files for the YB-Master and YB-TServer are available in /home/yugabyte/{master|tserver}/conf/server.conf
.
Transaction logs
If YugabyteDB was run with --fs_data_dirs=/mnt/d0,/mnt/d1
, you can find transaction logs (also known as write-ahead logs (WALs)) at /mnt/d*/yb-data/{master|tserver}/wals
.
To print the contents of the WAL, use the log-dump
utility, as follows:
./home/yugabyte/tserver/bin/log-dump /mnt/d0/yb-data/tserver/wals/table-e85a116bc557403e82f57037e7b13879/tablet-05bef5ed6fb74cabb420b648b6f850e3/
# use -print_entries=pb to print the entire contents of each record
Database files for tablets
The database (also known as SSTable) files are located at /mnt/d*/yb-data/{master|tserver}/data
.
You can print the contents of the SSTable files as follows:
./home/yugabyte/tserver/bin/ldb dump --compression_type=snappy --db=/mnt/d0/yb-data/tserver/data/table-e85a116bc557403e82f57037e7b13879/tablet-05bef5ed6fb74cabb420b648b6f850e3/
Debug logs
Debug logs are output to /home/yugabyte/{master|tserver}/logs
.
Standard output and standard error
stderr
and stdout
of YB-Master and YB-TServer processes are output to /home/yugabyte/tserver/tserver.{err|out}
.
Slow response logs
Slow responses take more than 75% of the configured RPC timeout. By default, these responses are logged at a WARNING
level in the following format, with a breakdown of time in various stages:
W0325 06:47:13.032176 116514816 inbound_call.cc:204] Call yb.consensus.ConsensusService.UpdateConsensus from 127.0.0.1:61050 (request call id 22856) took 2644ms (client timeout 1000).
W0325 06:47:13.033341 116514816 inbound_call.cc:208] Trace:
0325 06:47:10.388015 (+ 0us) service_pool.cc:109] Inserting onto call queue
0325 06:47:10.394859 (+ 6844us) service_pool.cc:170] Handling call
0325 06:47:10.450697 (+ 55838us) raft_consensus.cc:1026] Updating replica for 0 ops
0325 06:47:13.032064 (+2581367us) raft_consensus.cc:1242] Filling consensus response to leader.
0325 06:47:13.032106 (+ 42us) spinlock_profiling.cc:233] Waited 2.58 s on lock 0x108dc3d40. stack: 0000000103d63b0c 0000000103d639fc 00000001040ac908 0000000102f698ec 0000000102f698a4 0000000102f93039 0000000102f7e124 0000000102fdcf7b 0000000102fd90c9 00000001\
02504396 00000001032959f5 0000000103470473 0000000103473491 00000001034733ef 000000010347338b 000000010347314c
0325 06:47:13.032168 (+ 62us) inbound_call.cc:125] Queueing success response
yb-ts-cli
You can run various tablet-related commands with yb-ts-cli by pointing at the YB-Master, as follows:
./yb-ts-cli list_tablets --server_address=localhost:9000
./yb-ts-cli dump_tablet --server_address=localhost:9000 e1bc59288ee849ab850ae0a40bd88649
yb-admin
You can run various commands using yb-admin. You need to specify the full set of YB-Master ports {ip:ports}
with -master_addresses
, as follows:
# Get all tables
./yb-admin -master_addresses 127.0.0.1:7000,127.0.0.2:7000,127.0.0.3:7000 list_tables
# Get all tablets for a specific table
./yb-admin -master_addresses 127.0.0.1:7000,127.0.0.2:7000,127.0.0.3:7000 list_tablets yb_load_test
# List the tablet servers for each tablet
./yb-admin -master_addresses 127.0.0.1:7000,127.0.0.2:7000,127.0.0.3:7000 list_tablet_servers $(./yb-admin -master_addresses 127.0.0.1:7000,127.0.0.2:7000,127.0.0.3:7000 list_tablets yb_load_test)
# List all tablet servers
./yb-admin -master_addresses 127.0.0.1:7000,127.0.0.2:7000,127.0.0.3:7000 list_all_tablet_servers
# List all masters
./yb-admin -master_addresses 127.0.0.1:7000,127.0.0.2:7000,127.0.0.3:7000 list_all_masters
# Output master state to console
./yb-admin -master_addresses 127.0.0.1:7000,127.0.0.2:7000,127.0.0.3:7000 dump_masters_state
Real-time metrics
You can view metrics of various YugabyteDB processes at a particular node (for example, 127.0.0.1) at the following ports:
Process | Address |
---|---|
Master | 127.0.0.1:7000 |
TServer | 127.0.0.1:9000 |
YCQL | 127.0.0.1:12000 |
YSQL | 127.0.0.1:13000 |
For each process, you can see the following types of metrics:
Description | Endpoint |
---|---|
Per-Tablet, JSON Metrics | /metrics |
Per-Table, Prometheus Metrics | /prometheus-metrics |
RPC tracing
To enable tracing, you can set the enable_tracing
flag, as follows:
./yb-ts-cli --server_address=localhost:9100 set_flag enable_tracing 1
To enable tracing for all RPCs (not just the slow ones) including the enable_tracing
flag, you may also set the rpc_dump_all_traces
flag, as follows:
./yb-ts-cli --server_address=localhost:9100 set_flag rpc_dump_all_traces 1
Dynamic settings for gflags
Although setting string flags dynamically is not recommended as it is not thread-safe, the yb-ts-cli utility allows you to do that.
Before attempting to set flags, you need to identify the server using its Remote Procedure Call (RPC) port, as opposed to the HTTP port.
For example, you can increase the verbose logging level to 2 by executing the following command:
./yb-ts-cli --server_address=localhost:9100 set_flag v 2
Proto file contents
To dump the contents of a file containing a proto (such as a file in the consensus-meta or tablet-meta directory), use the yb-pbc-dump
utility, as follows:
./yb-pbc-dump /mnt/d0/yb-data/tserver/consensus-meta/dd57975ef2f2440497b5d96fc32146d3
./yb-pbc-dump /mnt/d0/yb-data/tserver/tablet-meta/bfb3f18736514eeb841b0307a066e66c
On macOS, the environment variable DYLD_FALLBACK_LIBRARY_PATH
needs to be set for pbc-dump
to work. To set this variable, add the following to ~/.bash_profile
:
export DYLD_FALLBACK_LIBRARY_PATH=~/code/yugabyte/build/latest/rocksdb-build