.. _nodetool

Nodetool
--------

Usage
---------

usage: nodetool [(-u <username> | --username <username>)]
        [(-pw <password> | --password <password>)] [(-h <host> | --host <host>)]
        [(-p <port> | --port <port>)]
        [(-pwf <passwordFilePath> | --password-file <passwordFilePath>)]
        [(-pp | --print-port)] <command> [<args>]

The most commonly used nodetool commands are:

    :doc:`assassinate` -                   Forcefully remove a dead node without re-replicating any data.  Use as a last resort if you cannot removenode

    :doc:`bootstrap` -                     Monitor/manage node's bootstrap process

    :doc:`cleanup` -                       Triggers the immediate cleanup of keys no longer belonging to a node. By default, clean all keyspaces

    :doc:`clearsnapshot` -                 Remove the snapshot with the given name from the given keyspaces

    :doc:`clientstats` -                   Print information about connected clients

    :doc:`compact` -                       Force a (major) compaction on one or more tables or user-defined compaction on given SSTables

    :doc:`compactionhistory` -             Print history of compaction

    :doc:`compactionstats` -               Print statistics on compactions

    :doc:`decommission` -                  Decommission the *node I am connecting to*

    :doc:`describecluster` -               Print the name, snitch, partitioner and schema version of a cluster

    :doc:`describering` -                  Shows the token ranges info of a given keyspace

    :doc:`disableauditlog` -               Disable the audit log

    :doc:`disableautocompaction` -         Disable autocompaction for the given keyspace and table

    :doc:`disablebackup` -                 Disable incremental backup

    :doc:`disablebinary` -                 Disable native transport (binary protocol)

    :doc:`disablefullquerylog` -           Disable the full query log

    :doc:`disablegossip` -                 Disable gossip (effectively marking the node down)

    :doc:`disablehandoff` -                Disable storing hinted handoffs

    :doc:`disablehintsfordc` -             Disable hints for a data center

    :doc:`disableoldprotocolversions` -    Disable old protocol versions

    :doc:`drain` -                         Drain the node (stop accepting writes and flush all tables)

    :doc:`enableauditlog` -                Enable the audit log

    :doc:`enableautocompaction` -          Enable autocompaction for the given keyspace and table

    :doc:`enablebackup` -                  Enable incremental backup

    :doc:`enablebinary` -                  Reenable native transport (binary protocol)

    :doc:`enablefullquerylog` -            Enable full query logging, defaults for the options are configured in cassandra.yaml

    :doc:`enablegossip` -                  Reenable gossip

    :doc:`enablehandoff` -                 Reenable future hints storing on the current node

    :doc:`enablehintsfordc` -              Enable hints for a data center that was previsouly disabled

    :doc:`enableoldprotocolversions` -     Enable old protocol versions

    :doc:`failuredetector` -               Shows the failure detector information for the cluster

    :doc:`flush` -                         Flush one or more tables

    :doc:`garbagecollect` -                Remove deleted data from one or more tables

    :doc:`gcstats` -                       Print GC Statistics

    :doc:`getbatchlogreplaythrottle` -     Print batchlog replay throttle in KB/s. This is reduced proportionally to the number of nodes in the cluster.

    :doc:`getcompactionthreshold` -        Print min and max compaction thresholds for a given table

    :doc:`getcompactionthroughput` -       Print the MB/s throughput cap for compaction in the system

    :doc:`getconcurrency` -                Get maximum concurrency for processing stages

    :doc:`getconcurrentcompactors` -       Get the number of concurrent compactors in the system.

    :doc:`getconcurrentviewbuilders` -     Get the number of concurrent view builders in the system

    :doc:`getendpoints` -                  Print the end points that owns the key

    :doc:`getfullquerylog` -           
    :doc:`print` -  configuration of fql if enabled, otherwise the configuration reflected in cassandra.yaml

    :doc:`getinterdcstreamthroughput` -    Print the Mb/s throughput cap for inter-datacenter streaming in the system

    :doc:`getlogginglevels` -              Get the runtime logging levels

    :doc:`getmaxhintwindow` -              Print the max hint window in ms

    :doc:`getseeds` -                      Get the currently in use seed node IP list excluding the node IP

    :doc:`getsnapshotthrottle` -           Print the snapshot_links_per_second throttle for snapshot/clearsnapshot

    :doc:`getsstables` -                   Print the sstable filenames that own the key

    :doc:`getstreamthroughput` -           Print the Mb/s throughput cap for streaming in the system

    :doc:`gettimeout` -                    Print the timeout of the given type in ms

    :doc:`gettraceprobability` -           Print the current trace probability value

    :doc:`gossipinfo` -                    Shows the gossip information for the cluster

    :doc:`help` -                          Display help information

    :doc:`import` -                        Import new SSTables to the system

    :doc:`info` -                          Print node information (uptime, load, ...)

    :doc:`invalidatecountercache` -        Invalidate the counter cache

    :doc:`invalidatekeycache` -            Invalidate the key cache

    :doc:`invalidaterowcache` -            Invalidate the row cache

    :doc:`join` -                          Join the ring

    :doc:`listsnapshots` -                 Lists all the snapshots along with the size on disk and true size. True size is the total size of all SSTables which are not backed up to disk. Size on disk is total size of the snapshot on disk. Total TrueDiskSpaceUsed does not make any SSTable deduplication.

    :doc:`move` -                          Move node on the token ring to a new token

    :doc:`netstats` -                      Print network information on provided host (connecting node by default)

    :doc:`pausehandoff` -                  Pause hints delivery process

    :doc:`profileload` -                   Low footprint profiling of activity for a period of time

    :doc:`proxyhistograms` -               Print statistic histograms for network operations

    :doc:`rangekeysample` -                Shows the sampled keys held across all keyspaces

    :doc:`rebuild` -                       Rebuild data by streaming from other nodes (similarly to bootstrap)

    :doc:`rebuild_index` -                 A full rebuild of native secondary indexes for a given table

    :doc:`refresh` -                       Load newly placed SSTables to the system without restart

    :doc:`refreshsizeestimates` -          Refresh system.size_estimates

    :doc:`reloadlocalschema` -             Reload local node schema from system tables

    :doc:`reloadseeds` -                   Reload the seed node list from the seed node provider

    :doc:`reloadssl` -                     Signals Cassandra to reload SSL certificates

    :doc:`reloadtriggers` -                Reload trigger classes

    :doc:`relocatesstables` -              Relocates sstables to the correct disk

    :doc:`removenode` -                    Show status of current node removal, force completion of pending removal or remove provided ID

    :doc:`repair` -                        Repair one or more tables

    :doc:`repair_admin` -              
    :doc:`list` -  and fail incremental repair sessions

    :doc:`replaybatchlog` -                Kick off batchlog replay and wait for finish

    :doc:`resetfullquerylog` -             Stop the full query log and clean files in the configured full query log directory from cassandra.yaml as well as JMX

    :doc:`resetlocalschema` -              Reset node's local schema and resync

    :doc:`resumehandoff` -                 Resume hints delivery process

    :doc:`ring` -                          Print information about the token ring

    :doc:`scrub` -                         Scrub (rebuild sstables for) one or more tables

    :doc:`setbatchlogreplaythrottle` -     Set batchlog replay throttle in KB per second, or 0 to disable throttling. This will be reduced proportionally to the number of nodes in the cluster.

    :doc:`setcachecapacity` -              Set global key, row, and counter cache capacities (in MB units)

    :doc:`setcachekeystosave` -            Set number of keys saved by each cache for faster post-restart warmup. 0 to disable

    :doc:`setcompactionthreshold` -        Set min and max compaction thresholds for a given table

    :doc:`setcompactionthroughput` -       Set the MB/s throughput cap for compaction in the system, or 0 to disable throttling

    :doc:`setconcurrency` -                Set maximum concurrency for processing stage

    :doc:`setconcurrentcompactors` -       Set number of concurrent compactors in the system.

    :doc:`setconcurrentviewbuilders` -     Set the number of concurrent view builders in the system

    :doc:`sethintedhandoffthrottlekb` -    Set hinted handoff throttle in kb per second, per delivery thread.

    :doc:`setinterdcstreamthroughput` -    Set the Mb/s throughput cap for inter-datacenter streaming in the system, or 0 to disable throttling

    :doc:`setlogginglevel` -               Set the log level threshold for a given component or class. Will reset to the initial configuration if called with no parameters.

    :doc:`setmaxhintwindow` -              Set the specified max hint window in ms

    :doc:`setsnapshotthrottle` -           Set the snapshot_links_per_second cap for snapshot and clearsnapshot throttling

    :doc:`setstreamthroughput` -           Set the Mb/s throughput cap for streaming in the system, or 0 to disable throttling

    :doc:`settimeout` -                    Set the specified timeout in ms, or 0 to disable timeout

    :doc:`settraceprobability` -           Sets the probability for tracing any given request to value. 0 disables, 1 enables for all requests, 0 is the default

    :doc:`sjk` -                           Run commands of 'Swiss Java Knife'. Run 'nodetool sjk --help' for more information.

    :doc:`snapshot` -                      Take a snapshot of specified keyspaces or a snapshot of the specified table

    :doc:`status` -                        Print cluster information (state, load, IDs, ...)

    :doc:`statusautocompaction` -      
    :doc:`status` -  of autocompaction of the given keyspace and table

    :doc:`statusbackup` -                  Status of incremental backup

    :doc:`statusbinary` -                  Status of native transport (binary protocol)

    :doc:`statusgossip` -                  Status of gossip

    :doc:`statushandoff` -                 Status of storing future hints on the current node

    :doc:`stop` -                          Stop compaction

    :doc:`stopdaemon` -                    Stop cassandra daemon

    :doc:`tablehistograms` -               Print statistic histograms for a given table

    :doc:`tablestats` -                    Print statistics on tables

    :doc:`toppartitions` -                 Sample and print the most active partitions

    :doc:`tpstats` -                       Print usage statistics of thread pools

    :doc:`truncatehints` -                 Truncate all hints on the local node, or truncate hints for the endpoint(s) specified.

    :doc:`upgradesstables` -               Rewrite sstables (for the requested tables) that are not on the current version (thus upgrading them to said current version)

    :doc:`verify` -                        Verify (check data checksum for) one or more tables

    :doc:`version` -                       Print cassandra version

    :doc:`viewbuildstatus` -               Show progress of a materialized view build

See 'nodetool help <command>' for more information on a specific command.

