• Stars
    star
    397
  • Rank 104,956 (Top 3 %)
  • Language
    Go
  • License
    Apache License 2.0
  • Created over 5 years ago
  • Updated 6 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A tool for tuning TimescaleDB for better performance by adjusting settings to match your system's CPU and memory resources.

timescaledb-tune

timescaledb-tune is a program for tuning a TimescaleDB database to perform its best based on the host's resources such as memory and number of CPUs. It parses the existing postgresql.conf file to ensure that the TimescaleDB extension is appropriately installed and provides recommendations for memory, parallelism, WAL, and other settings.

Getting started

You need the Go runtime (1.12+) installed, then simply go install this repo:

$ go install github.com/timescale/timescaledb-tune/cmd/timescaledb-tune@main

It is also available as a binary package on a variety systems using Homebrew, yum, or apt. Search for timescaledb-tools.

Using timescaledb-tune

By default, timescaledb-tune attempts to locate your postgresql.conf file for parsing by using heuristics based on the operating system, so the simplest invocation would be:

$ timescaledb-tune

You'll then be given a series of prompts that require minimal user input to make sure your config file is up to date:

Using postgresql.conf at this path:
/usr/local/var/postgres/postgresql.conf

Is this correct? [(y)es/(n)o]: y
Writing backup to:
/var/folders/cr/zpgdkv194vz1g5smxl_5tggm0000gn/T/timescaledb_tune.backup201901071520

shared_preload_libraries needs to be updated
Current:
#shared_preload_libraries = 'timescaledb'
Recommended:
shared_preload_libraries = 'timescaledb'
Is this okay? [(y)es/(n)o]: y
success: shared_preload_libraries will be updated

Tune memory/parallelism/WAL and other settings? [(y)es/(n)o]: y
Recommendations based on 8.00 GB of available memory and 4 CPUs for PostgreSQL 11

Memory settings recommendations
Current:
shared_buffers = 128MB
#effective_cache_size = 4GB
#maintenance_work_mem = 64MB
#work_mem = 4MB
Recommended:
shared_buffers = 2GB
effective_cache_size = 6GB
maintenance_work_mem = 1GB
work_mem = 26214kB
Is this okay? [(y)es/(s)kip/(q)uit]:

If you have moved the configuration file to a different location, or auto-detection fails (file an issue please!), you can provide the location with the --conf-path flag:

$ timescaledb-tune --conf-path=/path/to/postgresql.conf

At the end, your postgresql.conf will be overwritten with the changes that you accepted from the prompts.

Other invocations

By default, timescaledb-tune provides recommendations for a typical timescaledb workload. The --profile flag can be used to tailor the recommendations for other workload types. Currently, the only non-default profile is "promscale". The TSTUNE_PROFILE environment variable can also be used to affect this behavior.

$ timescaledb-tune --profile promscale

If you want recommendations for a specific amount of memory and/or CPUs:

$ timescaledb-tune --memory="4GB" --cpus=2

If you want to set a specific number of background workers (timescaledb.max_background_workers):

$ timescaledb-tune --max-bg-workers=16

If you have a dedicated disk for WAL, or want to specify how much of a shared disk should be used for WAL:

$ timescaledb-tune --wal-disk-size="10GB"

If you want to accept all recommendations, you can use --yes:

$ timescaledb-tune --yes

If you just want to see the recommendations without writing:

$ timescaledb-tune --dry-run

If there are too many prompts:

$ timescaledb-tune --quiet

And if you want to skip all prompts and get quiet output:

$ timescaledb-tune --quiet --yes

And if you want to append the recommendations to the end of your conf file instead of in-place replacement:

$ timescaledb-tune --quiet --yes --dry-run >> /path/to/postgresql.conf

Restoring backups

timescaledb-tune makes a backup of your postgresql.conf file each time it runs (without the --dry-run flag) in your temp directory. If you find that the configuration given is not working well, you can restore a backup by using the --restore flag:

$ timescaledb-tune --restore
Using postgresql.conf at this path:
/usr/local/var/postgres/postgresql.conf

Is this correct? [(y)es/(n)o]: y
Available backups (most recent first):
1) timescaledb_tune.backup201901222056 (14 hours ago)
2) timescaledb_tune.backup201901221640 (18 hours ago)
3) timescaledb_tune.backup201901221050 (24 hours ago)
4) timescaledb_tune.backup201901211817 (41 hours ago)

Use which backup? Number or (q)uit: 1
Restoring 'timescaledb_tune.backup201901222056'...
success: restored successfully

Contributing

We welcome contributions to this utility, which like TimescaleDB is released under the Apache2 Open Source License. The same Contributors Agreement applies; please sign the Contributor License Agreement (CLA) if you're a new contributor.

Releasing

Please follow the instructions here to publish a release of this tool.

More Repositories

1

timescaledb

An open-source time-series SQL database optimized for fast ingest and complex queries. Packaged as a PostgreSQL extension.
C
16,259
star
2

promscale

[DEPRECATED] Promscale is a unified metric and trace observability backend for Prometheus, Jaeger and OpenTelemetry built on PostgreSQL and TimescaleDB.
Go
1,330
star
3

tsbs

Time Series Benchmark Suite, a tool for comparing and evaluating databases for time series data
Go
1,196
star
4

tobs

tobs - The Observability Stack for Kubernetes. Easy install of a full observability stack into a k8s cluster with Helm charts.
Shell
549
star
5

timescaledb-parallel-copy

A binary for parallel copying of CSV data into a TimescaleDB hypertable
Go
345
star
6

prometheus-postgresql-adapter

Use PostgreSQL as a remote storage database for Prometheus
Go
335
star
7

timescaledb-toolkit

Extension for more hyperfunctions, fully compatible with TimescaleDB and PostgreSQL πŸ“ˆ
Rust
324
star
8

timescaledb-docker

Release Docker builds of TimescaleDB
Dockerfile
279
star
9

helm-charts

Configuration and Documentation to run TimescaleDB in your Kubernetes cluster
Shell
260
star
10

pg_prometheus

PostgreSQL extension for Prometheus data
C
213
star
11

timescaledb-docker-ha

Create Docker images containing TimescaleDB, Patroni to be used by developers and Kubernetes.
Python
134
star
12

examples

Collection of example applications and tools to help you get familiar with TimescaleDB
JavaScript
119
star
13

nft-starter-kit

Timescale NFT Starter Kit
Python
110
star
14

outflux

Export data from InfluxDB to TimescaleDB
Go
83
star
15

vector-cookbook

Timescale Vector Cookbook. A collection of recipes to build applications with LLMs using PostgreSQL and Timescale Vector.
Jupyter Notebook
77
star
16

opentelemetry-demo

A demo system for exploring the tracing features of Promscale
Python
61
star
17

streaming-replication-docker

TimescaleDB Streaming Replication in Docker
Shell
56
star
18

docs

Timescale product documentation πŸ“–
JavaScript
46
star
19

timescaledb-extras

Helper functions and procedures for timescale
PLpgSQL
39
star
20

benchmark-postgres

Tools for benchmarking TimescaleDB vs PostgreSQL
Go
37
star
21

promscale_extension

[DEPRECATED] Tables, types and functions supporting Promscale
PLpgSQL
37
star
22

docs.timescale.com-content

Content pages for TimescaleDB documentation
JavaScript
35
star
23

timescaledb-backup

Go
33
star
24

pgspot

Spot vulnerabilities in postgres SQL scripts
Python
28
star
25

timescaledb-wale

Dockerized WAL-E with an HTTP API
Python
21
star
26

terraform-provider-timescale

Timescale Cloud Terraform Provider
Go
17
star
27

homebrew-tap

TimescaleDB Homebrew tap, containing formulas for the database, tools, etc.
Ruby
17
star
28

pg_influx

InfluxDB Line Protocol Listener for PostgreSQL
C
16
star
29

python-vector

Jupyter Notebook
16
star
30

tsv-timemachine

Sample application for time aware RAG with Streamlit, LlamaIndex and Timescale Vector. Learn more at https://www.timescale.com/ai
Python
8
star
31

promscale-benchmark

Makefile
8
star
32

templates

Templates to get started with Timescale on Finance or Sensors (IoT)
PLpgSQL
7
star
33

timescale-extension-utils-rs

Rust
5
star
34

doctor

Rule-based recommendations about your timeseries database.
Python
4
star
35

web-developer-assignment

HTML
3
star
36

wikistream-docker

A Docker environment for https://github.com/timescale/wikistream
Shell
3
star
37

mta-timescale

Demo: Load MTA bus feeds into TimescaleDB
3
star
38

cloud-actions

Cloud public actions
Shell
3
star
39

aws-lambda-example

A sample serverless AWS Lambda time-series application.
Python
2
star
40

frontend-developer-assignment

HTML
2
star
41

pg_traceam

Simple table access method that just prints out what functions in the access methods and related functions that are called.
C
2
star
42

state_of_postgres

2019
SCSS
1
star
43

build-actions

GitHub actions for release pipelines (building, publishing, checking, etc.)
Shell
1
star
44

pgschema

1
star
45

docs-htmltojsx

A fork of react-magic html-to-jsx specifically modified to parse timescale docs
JavaScript
1
star
46

postgres_cheat_sheet

1
star
47

promscale_specs

Formal specifications for Promscale components
TLA
1
star