.. _nodetool

Nodetool
--------

Usage
---------

usage: nodetool [(-pwf <passwordFilePath> | --password-file <passwordFilePath>)]
        [(-p <port> | --port <port>)] [(-h <host> | --host <host>)]
        [(-pw <password> | --password <password>)] [(-pp | --print-port)]
        [(-u <username> | --username <username>)] <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. If no snapshotName is specified we will remove all snapshots

    :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:`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:`getreplicas` -                   Print replicas for a given key

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

    :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:`handoffwindow` -                 Print current hinted handoff window

    :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.

    :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:`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:`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.

