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 dbtimer

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.1.tar.gz (14.3 kB view hashes)

Uploaded Source

Built Distribution

dbtimer-0.1.1-py3-none-any.whl (23.9 kB view hashes)

Uploaded Python 3

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