Skip to main content

A Django management command to measure and benchmark database query performance.

Project description

DBTimer for Django

Overview

DBTimer is a Django management command designed to measure the performance of various database operations (read, write, search) across different models and databases in a Django application. It helps developers and database administrators benchmark and optimize query performance by recording execution times and generating visual graphs.

Features

  • Measure Query Times: Perform read, write, and search operations on specified models and record the time taken for each operation.
  • Support for Multiple Databases: Test and compare the performance of different database configurations.
  • Automated Graph Generation: Generate graphs visualizing query performance and upload them to an S3-compatible storage service.
  • Detailed Reporting: Save results in JSON and HTML formats, including performance metrics and comparisons.
  • Exception Handling: Log and handle exceptions encountered during database operations.
  • Customizable via Django Settings: Configure models, fields, and operations to benchmark directly in Django settings.

Installation

You can install the Django DBTimer Command package via pip:

pip install django-dbtimer-command

Configuration

To use the Django DBTimer Command, you need to add some configuration to your Django settings:

settings_local.py

Most commonly you will be creating a settings_local because this feature will likely not be used in production.

####Example:

DBTIMER_ARGS = {
    "cycles": 100,  # Number of iterations per operation
    "sleep": 0.1,   # Sleep interval between operations
    "operations": ["read", "write", "search"],  # Operations to benchmark
    "models": [
        {
            "conf": ("myapp", "MyModel"),
            "name": "MyModel",
            "attr": "field_name",
            "search": {"field_name__icontains": "test"},
        },
        # Add more models as needed
    ],
    "dbs": ["default", "replica"],  # Databases to test
}

AWS S3 configuration for storing graphs

AWS_S3_REGION_NAME = 'your-region' AWS_S3_ENDPOINT_URL = 'https://your-s3-endpoint' AWS_ACCESS_KEY_ID = 'your-access-key-id' AWS_SECRET_ACCESS_KEY = 'your-secret-access-key' LINODE_BUCKET = 'your-s3-bucket-name'

Usage

Run the management command with optional notes: python manage.py dbtimer --notes "Testing query performance on different branches"

Output

The command will produce:

  • Graphs: Plots showing the duration of each operation for different database configurations, uploaded to the specified S3 bucket.
  • JSON Report: A JSON file containing detailed results of the benchmark session.
  • HTML Report: An HTML file summarizing the results, including links to the generated graphs.

Example Output

After running the command, you will see logs indicating the progress and completion of the benchmarking process. The output files will be saved to your S3 bucket, and a URL will be provided in the console.

Dependencies

  • Django
  • tqdm for progress bars
  • boto3 for S3 operations
  • matplotlib for graph generation
  • requests for HTTP operations Ensure these dependencies are listed in your requirements.txt or setup.py for easy installation.

Contributing

Contributions are welcome! Please open an issue or submit a pull request for any enhancements or bug fixes.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Contact

For any questions or feedback, please contact devs@djangowebstudio.com.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dbtimer-0.1.0.tar.gz (14.3 kB view details)

Uploaded Source

Built Distribution

dbtimer-0.1.0-py3-none-any.whl (23.9 kB view details)

Uploaded Python 3

File details

Details for the file dbtimer-0.1.0.tar.gz.

File metadata

  • Download URL: dbtimer-0.1.0.tar.gz
  • Upload date:
  • Size: 14.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.7

File hashes

Hashes for dbtimer-0.1.0.tar.gz
Algorithm Hash digest
SHA256 5713ebdb2901fa682260eed913cf0539c32828e24b44dbf694a019b71ec8ee26
MD5 a92b9296057f68fc3a4401cfcf1bac95
BLAKE2b-256 f008b1ba6721f8283d1f6a7f7cbf7215a71bbb31bbee27303b0b198856021eb9

See more details on using hashes here.

File details

Details for the file dbtimer-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: dbtimer-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 23.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.7

File hashes

Hashes for dbtimer-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1096a94ca0583d6132c67052075f325fc7a891c9d7307c35bce03a0790fc4c06
MD5 142450b525d74da763983fbdacdb96aa
BLAKE2b-256 b9e2f729680f8e9d8e00709d98718ce6ddbaeb1c1587044e89bc57edbd0636a1

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page