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 details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

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

File metadata

  • Download URL: dbtimer-0.1.1.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.1.tar.gz
Algorithm Hash digest
SHA256 184ec1dd3fbb4793e604f16ffae3069742c44e506c694bfd782336bcdc5317b7
MD5 04330230ba9cd47b5105ea07d6a9e962
BLAKE2b-256 fa343ddc5a966235c0f4225186ac4690ab72098c8be4c3978486e44a242045b5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: dbtimer-0.1.1-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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ccb909d09c320a307650b375dfc16693c1846cb206ccf56809e799537b0c8b2a
MD5 ce8c1bd0a7684fed9fb85c50633a57f3
BLAKE2b-256 95b4a3201f9863157be7275426386c7f86c0e95144a99771a8adab90dcb2c406

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