- English
- français
- Deutsche
- Contact us
- Docs
- Login

A recent performance study analyzing hundreds of real Shopware projects found a 10× difference in page load times between similar storefronts. Product search pages ranged from under 200ms to well over 2 seconds; same platform, same page types, vastly different results.
This massive gap is not about luck or the platform itself. Running a high-performing Shopware store requires intentional infrastructure decisions, careful configuration, and defined development practices. A single misconfigured plugin, an unbatched ERP sync, or debug logging left enabled in production can transform a fast storefront into an unusable one.
This guide shares practical lessons from months of load testing across seven infrastructure tiers. We tested scenarios handling 3,000 to 73,000 orders per day to identify what configurations deliver the best Shopware performance.
If you're a developer, software architect, DevOps engineer, or product manager working with Shopware, this guide is written for you. We'll walk through the common performance challenges we've encountered across dozens of projects, what the testing data actually reveals, and how to optimize your Shopware deployment for real-world scalability.
Two Shopware sites that appear identical can behave very differently under load. Here's what we experience repeatedly across Shopware projects:
These issues aren't due to bad intentions—they stem from complexity. Shopware is modular and capable, but without discipline and the right tools, performance suffers.
Built on Upsun, Shopware PaaS provides enterprise-grade infrastructure with SLAs for scalability, high availability, and performance. It includes standardized developer workflows with Git-based environments, CI/CD, and rollback capabilities built in. You also get tools for diagnosis and performance tuning, including native support for Blackfire, as well as best-practice templates and architectural guidance.
A recent Shopware 6 performance benchmark by Tideways analyzed hundreds of real projects and found a 10× difference in Time-to-First-Byte (TTFB) across similar page types. Product search pages ranged from under 200ms to well over 2 seconds, depending on the project.
This disparity reflects what we see in practice: the software isn't inherently slow, but it's highly sensitive to how it's used.
In late 2024, we received a support ticket about a Shopware storefront suffering severe slowness. Some pages took over 10 seconds to load, with extreme cases exceeding 3 minutes.
Using Blackfire's profiling capabilities, we quickly identified the root cause: the PayPal plugin was running with DEBUG-level logging enabled. Under heavy traffic, this overwhelmed the disk with write operations, causing I/O contention as processes queued to write their own logs. Once debug mode was disabled, response times recovered almost immediately.
This case illustrates a recurring theme: a small misconfiguration in a third-party extension can destabilize the entire stack.
No matter how efficient your custom code is, nothing beats a fast cache. Whether at the edge (Fastly), on the application side (Symfony HTTP cache), or in the database/query layer (Redis, Doctrine metadata), caching is the primary strategy for sustainable performance.
Studies correlate every second of added load time with a drop in conversion rate. For Shopware stores competing in crowded retail markets, performance isn't just technical, it's commercial.
Shopware PaaS offers several infrastructure tiers:
Shared-resource model where your project runs in isolated containers on VMs shared with other customers. Best suited for entry-level and small-to-medium projects, offering cost-effective pricing; however, performance predictability is limited under extreme load conditions.
Container-based model, but on dedicated VMs. All resources are exclusive to your project, enabling burst capacity and consistent performance. All containers are co-located on the same host, eliminating inter-service network latency. DGH plans also provide significantly higher memory limits than standard Grid plans.
Best for mid-sized to high-traffic storefronts needing predictable CPU access.
Three fully dedicated VMs configured for high availability with MySQL in multimaster cluster configuration, Redis with multi-master setup, and redundant application containers. Fully dedicated compute, network, and storage with zero-downtime vertical scaling.
Best for production environments with high concurrency and uptime demands.
Separates concerns explicitly: three core nodes handle backend services (DB, cache, queues) while three or more web nodes serve application traffic. Core nodes scale vertically; web nodes scale both vertically and horizontally for seamless dynamic auto-scaling.
Best for enterprise-grade setups with high frontend concurrency or traffic spikes.
Don't leave memory allocation and CPU resources at defaults. Set memory usage expectations explicitly in .upsun/config.yaml, enabling the platform to optimize PHP-FPM concurrency settings accordingly.
Maintain CPU usage below 70% under load to preserve headroom during peak traffic events. Infrastructure tiers should be selected based on both average load and burst capacity, considering business seasonality.
HTTP caching, application-side caching (Symfony HTTP cache), and object caching (Redis) must work in concert. Where possible, content should be made cacheable by design—using GET rather than POST methods where appropriate, ensuring consistent cache headers, and avoiding patterns that lead to cache fragmentation.
Prewarm the Fastly cache of critical pages after deployments or content imports to ensure traffic isn't served cold.
Validate that the cache is functioning by inspecting HTTP response headers, particularly the X-Cache header. A HIT value indicates the response was served from cache; MISS suggests a cache bypass or expiration.
Manage cache invalidation responsibly. Unbatched product updates or poorly scheduled ERP synchronizations can result in widespread cache purges. Techniques such as soft purges and deferred purging intervals can help mitigate their impact.
ESI (Edge Side Includes) (Shopware ≥ 6.6.10.0) lets developers split page rendering into independently cacheable fragments. This is ideal when only parts of a page need frequent updates.
Soft purge (Shopware ≥ 6.4.15.0) marks entries as stale but still serves them until refreshed. The first request triggers background regeneration, allowing users to receive functional content without backend spikes.
Performance regressions are most frequently traced to third-party or custom plugins. These may introduce costly hooks, register redundant services, or execute blocking logic during template rendering or checkout flows.
Performance-aware development must include plugin impact assessment—both at installation and during updates. Even unused plugins may consume resources. Routinely audit the full plugin stack and remove obsolete packages.
Misconfiguration at the admin level can significantly impact performance. For example, configuring category pages to display too many products leads to inefficient query execution. Dynamic rule conditions and promotions must be designed with query complexity in mind.
Where possible, avoid relying on raw SQL-based search behavior. Shopware PaaS supports integration with scalable search engines, such as OpenSearch, which offload search logic from the database.
External API calls should never block storefront responses. APIs are inherently brittle—slowness or outages can cascade across your entire system. External communications should be handled asynchronously whenever possible.
Logging levels must be adjusted appropriately for production environments. Enabling verbose or debug-level logs in live storefronts can overwhelm disk I/O and cause delays in application responses.
Successful Shopware implementations have a defined performance budget: measurable targets for TTFB thresholds, acceptable CPU usage under peak load, memory constraints, and failure rate ceilings. These metrics should guide development and be validated continuously.
Performance expectations must also be reflected in the development lifecycle: Git-based CI/CD workflows, environment consistency (dev, staging, production), and continuous observability.
We used Grafana K6 as the load testing framework, building on Shopware-specific K6 scenarios that include four key traffic patterns:
We tuned tests to mirror production behavior by using a fixed dataset and codebase across all tests, maintaining a consistent cache state with Crawlee to prewarm Fastly's HTTP cache, and resetting the database before each run.
We adjusted virtual users (VUs) and pauses between actions to simulate natural usage rather than raw concurrency. Without these pauses, smaller plans are saturated almost instantly, producing stress test results rather than load test results.
We calibrated each test to align with:
Tests ran for 5 minutes per configuration, repeated across six plan types.
Here's what the testing revealed:
| Plan | Total CPU | Peak RPS | p95 TTFB | Orders/day | % CPU used | % Failures |
|---|---|---|---|---|---|---|
| XL | 6.15 | 32 | 537ms | 3,060 | 78.4% | 0.01% |
| 2XL | 11.9 | 55.3 | 549ms | 5,580 | 68.6% | 0.03% |
| 4XL | 13.4 | 61.7 | 549ms | 6,300 | 67.7% | 0.01% |
| DGH16 | 16 | 76 | 514ms | 7,560 | 70.2% | 0.00% |
| DGH32 | 32 | 165.7 | 598ms | 17,280 | 70.9% | 0.01% |
| DGH64 | 64 | 459.67 | 578ms | 41,940 | 75.1% | 0.00% |
| DGH128 | 128 | 898.33 | 545ms | 73,260 | 59.6% | 0.00% |
Key Observations
Shopware PaaS includes Blackfire by default, giving you powerful tools to profile, observe, and continuously optimize your storefronts.
Profiling helps answer questions like:
You can initiate a profile from the Blackfire browser extension, the Blackfire CLI in staging or development, or your CI pipeline for automated test-based profiling.
Each profile provides a flame graph of the full request lifecycle, including execution time per function or service, I/O and memory usage hotspots, and time spent in templates, Doctrine queries, Redis calls, and plugins.
Blackfire offers Shopware-specific instrumentation that exposes performance metrics aligned with the platform's architecture, including precise timings for ProductListingRoute, template rendering performance, and plugin listener overhead.
Three years ago, a Shopware PaaS pilot customer experienced significant performance degradation, which occasionally resulted in downtime lasting several minutes and occurred multiple times a month. Using Blackfire enabled the immediate detection of a Statistics module executing exceptionally large queries, which effectively locked the MySQL database for durations of up to 16 minutes.
Blackfire facilitated rapid identification of the root cause within minutes, converting prolonged speculative analyses into swift diagnoses.
Default or ill-considered configuration choices are one of the most common sources of performance degradation. Category pages set to display too many products, logging levels left at debug in production, or pagination settings left in the default state all contribute to poor performance.
Projects that perform well exhibit intentionality in their setup: pagination, logging verbosity, cache invalidation behavior, and plugin configurations are explicitly tuned.
Third-party and custom plugins frequently account for the majority of runtime overhead in poorly performing storefronts. A plugin may introduce hooks that trigger on every request, perform redundant database operations, or interfere with cacheability.
High-performing projects treat plugins as runtime components to be evaluated and, where necessary, replaced or disabled; not just installed.
Caching success depends on deliberate implementation: using GET methods over POST, proper cache headers, and URL structures that avoid unnecessary variation.
In many cases, performance issues stem not from an absence of caching, but from cache invalidation processes triggered by unbatched ERP updates or administrative changes. Projects that maintain performance under load manage invalidation carefully and employ soft purge strategies.
Effective testing requires representative traffic blends, realistic conversion rates, appropriate delays between actions, and accurate replication of backend behaviors. This includes your CDN; while including Fastly in load tests may seem controversial, it's essential since Fastly is a key component of the runtime environment.
Testing that omits API imports, bot traffic, or concurrent checkout processes may fail to reveal scalability bottlenecks until they manifest in production.
Successful Shopware projects are characterized by operational discipline, including CI/CD pipelines, staging environments that mirror production, monitoring and alerting, and well-tested rollback procedures.
This extends to campaign preparation; peak traffic events are treated as technical milestones. High-performing teams rehearse traffic scenarios in advance, prewarm caches, monitor system metrics throughout, and ensure rollback readiness.
Before going live or launching a major campaign, confirm:
The results of our testing and field experience demonstrate that Shopware can perform exceptionally well, but only when supported by deliberate infrastructure decisions, thoughtful architectural patterns, and disciplined operational practices.
The most consistent lesson: Shopware performance is a shared, continuous responsibility. It's shaped not only by infrastructure size or application code, but by how thoughtfully a project is configured, extended, observed, and operated.
Real-world deployments prove this. A misconfigured payment plugin logging at the debug level in one project generated excessive disk I/O, severely slowing the site. Another experienced regular freezes due to an analytics module issuing long-running SQL queries that locked the database. One customer generated over 500 million cache invalidations per day through unbatched ERP updates, resulting in the cache remaining perpetually cold.
In contrast, projects that achieved stable, fast response times shared certain habits: they employed tools like Blackfire to locate bottlenecks, used deferred or soft purging to manage cache invalidation intelligently, and maintained close alignment between ERP updates and cache regeneration strategies. They didn't wait for performance to degrade; they designed for it.
Performance excellence isn't reserved for large teams or enterprise budgets; it's the result of consistently applying engineering discipline.