The only agent that thinks for itself

Autonomous Monitoring with self-learning AI built-in, operating independently across your entire stack.

Unlimited Metrics & Logs
Machine learning & MCP
5% CPU, 150MB RAM
3GB disk, >1 year retention
800+ integrations, zero config
Dashboards, alerts out of the box
> Discover Netdata Agents

Centralized metrics streaming and storage

Aggregate metrics from multiple agents into centralized Parent nodes for unified monitoring across your infrastructure.

Stream from unlimited agents
Long-term data retention
High availability clustering
Data replication & backup
Scalable architecture
Enterprise-grade security
> Learn about Parents

Fully managed cloud platform

Access your monitoring data from anywhere with our SaaS platform. No infrastructure to manage, automatic updates, and global availability.

Zero infrastructure management
99.9% uptime SLA
Global data centers
Automatic updates & patches
Enterprise SSO & RBAC
SOC2 & ISO certified
> Explore Netdata Cloud

Deploy Netdata Cloud in your infrastructure

Run the full Netdata Cloud platform on-premises for complete data sovereignty and compliance with your security policies.

Complete data sovereignty
Air-gapped deployment
Custom compliance controls
Private network integration
Dedicated support team
Kubernetes & Docker support
> Learn about Cloud On-Premises

Powerful, intuitive monitoring interface

Modern, responsive UI built for real-time troubleshooting with customizable dashboards and advanced visualization capabilities.

Real-time chart updates
Customizable dashboards
Dark & light themes
Advanced filtering & search
Responsive on all devices
Collaboration features
> Explore Netdata UI

Monitor on the go

Native iOS and Android apps bring full monitoring capabilities to your mobile device with real-time alerts and notifications.

iOS & Android apps
Push notifications
Touch-optimized interface
Offline data access
Biometric authentication
Widget support
> Download apps

The future of infrastructure observability

See our strategic direction across AI-native observability, full-stack signals, operational intelligence, and enterprise platform maturity.

AI-native observability
Full-stack signal coverage
Operational intelligence
Enterprise platform maturity
Agent releases every 6 weeks
Cloud continuous delivery
> Explore Product Roadmap

Best energy efficiency

True real-time per-second

100% automated zero config

Centralized observability

Multi-year retention

High availability built-in

Zero maintenance

Always up-to-date

Enterprise security

Complete data control

Air-gap ready

Compliance certified

Millisecond responsiveness

Infinite zoom & pan

Works on any device

Native performance

Instant alerts

Monitor anywhere

AI-native observability

Continuous delivery

Open source foundation

80% Faster Incident Resolution

AI-powered troubleshooting from detection, to root cause and blast radius identification, to reporting.

True Real-Time and Simple, even at Scale

Linearly and infinitely scalable full-stack observability, that can be deployed even mid-crisis.

90% Cost Reduction, Full Fidelity

Instead of centralizing the data, Netdata distributes the code, eliminating pipelines and complexity.

See and Map Your Entire Network

Live topology, flow analytics, and SNMP device and trap monitoring — unified with your full-stack observability.

Control Without Surrender

SOC 2 Type 2 certified with every metric kept on your infrastructure.

Integrations

800+ collectors and notification channels, auto-discovered and ready out of the box.

800+ data collectors
Auto-discovery & zero config
Cloud, infra, app protocols
Notifications out of the box
> Explore integrations
Real Results
46% Cost Reduction

Reduced monitoring costs by 46% while cutting staff overhead by 67%.

— Leonardo Antunez, Codyas

Zero Pipeline

No data shipping. No central storage costs. Query at the edge.

From Our Users
"Out-of-the-Box"

So many out-of-the-box features! I mostly don't have to develop anything.

— Simon Beginn, LANCOM Systems

No Query Language

Point-and-click troubleshooting. No PromQL, no LogQL, no learning curve.

Enterprise Ready
67% Less Staff, 46% Cost Cut

Enterprise efficiency without enterprise complexity—real ROI from day one.

— Leonardo Antunez, Codyas

SOC 2 Type 2 Certified

Zero data egress. Only metadata reaches the cloud. Your metrics stay on your infrastructure.

Full Coverage
800+ Collectors

Auto-discovered and configured. No manual setup required.

Any Notification Channel

Slack, PagerDuty, Teams, email, webhooks—all built-in.

Built for the People Who Get Paged

Because 3am alerts deserve instant answers, not hour-long hunts.

Every Industry Has Rules. We Master Them.

See how healthcare, finance, and government teams cut monitoring costs 90% while staying audit-ready.

Monitor Any Technology. Configure Nothing.

Install the agent. It already knows your stack.
From Our Users
"A Rare Unicorn"

Netdata gives more than you invest in it. A rare unicorn that obeys the Pareto rule.

— Eduard Porquet Mateu, TMB Barcelona

99% Downtime Reduction

Reduced website downtime by 99% and cloud bill by 30% using Netdata alerts.

— Falkland Islands Government

Real Savings
30% Cloud Cost Reduction

Optimized resource allocation based on Netdata alerts cut cloud spending by 30%.

— Falkland Islands Government

46% Cost Cut

Reduced monitoring staff by 67% while cutting operational costs by 46%.

— Codyas

Real Coverage
"Plugin for Everything"

Netdata has agent capacity or a plugin for everything, including Windows and Kubernetes.

— Eduard Porquet Mateu, TMB Barcelona

"Out-of-the-Box"

So many out-of-the-box features! I mostly don't have to develop anything.

— Simon Beginn, LANCOM Systems

Real Speed
Troubleshooting in 30 Seconds

From 2-3 minutes to 30 seconds—instant visibility into any node issue.

— Matthew Artist, Nodecraft

20% Downtime Reduction

20% less downtime and 40% budget optimization from out-of-the-box monitoring.

— Simon Beginn, LANCOM Systems

Pay per Node. Unlimited Everything Else.

One price per node. Unlimited metrics, logs, users, and retention. No per-GB surprises.

Free tier—forever
No metric limits or caps
Retention you control
Cancel anytime
> See pricing plans

What's Your Monitoring Really Costing You?

Most teams overpay by 40-60%. Let's find out why.

Expose hidden metric charges
Calculate tool consolidation
Customers report 30-67% savings
Results in under 60 seconds
> See what you're really paying

Your Infrastructure Is Unique. Let's Talk.

Because monitoring 10 nodes is different from monitoring 10,000.

On-prem & air-gapped deployment
Volume pricing & agreements
Architecture review for your scale
Compliance & security support
> Start a conversation

Monitoring That Sells Itself

Deploy in minutes. Impress clients in hours. Earn recurring revenue for years.

30-second live demos close deals
Zero config = zero support burden
Competitive margins & deal protection
Response in 48 hours
> Apply to partner

Per-Second Metrics at Homelab Prices

Same engine, same dashboards, same ML. Just priced for tinkerers.

Community: Free forever · 5 nodes · non-commercial
Homelab: $90/yr · unlimited nodes · fair usage
> Get the Homelab Plan

$1,000 Per Referral. Unlimited Referrals.

Your colleagues get 10% off. You get 10% commission. Everyone wins.

10% of subscriptions, up to $1,000 each
Track earnings inside Netdata Cloud
PayPal/Venmo payouts in 3-4 weeks
No caps, no complexity
> Get your referral link
Cost Proof
40% Budget Optimization

"Netdata's significant positive impact" — LANCOM Systems

Calculate Your Savings

Compare vs Datadog, Grafana, Dynatrace

Savings Proof
46% Cost Reduction

"Cut costs by 46%, staff by 67%" — Codyas

30% Cloud Bill Savings

"Reduced cloud bill by 30%" — Falkland Islands Gov

Enterprise Proof
"Better Than Combined Alternatives"

"Better observability with Netdata than combining other tools." — TMB Barcelona

Real Engineers, <24h Response

DPA, SLAs, on-prem, volume pricing

Why Partners Win
Demo Live Infrastructure

One command, 30 seconds, real data—no sandbox needed

Zero Tickets, High Margins

Auto-config + per-node pricing = predictable profit

Homelab Ready
Free Video Course

8-episode Netdata tutorial by LearnLinux.tv

76k+ GitHub Stars

3rd most starred monitoring project

Worth Recommending
Product That Delivers

Customers report 40-67% cost cuts, 99% downtime reduction

Zero Risk to Your Rep

Free tier lets them try before they buy

AI Support Assistant, Available 24/7

Nedi has access to all official documentation, source code, and resources. Ask any question about Netdata—responds in your language.

Deployment & configuration
Troubleshooting & sizing
Alerts & notifications
Evidence-based answers
> Ask Nedi now

Never Fight Fires Alone

Docs, community, and expert help—pick your path to resolution.

Learn.netdata.cloud docs
Discord, Forums, GitHub
Premium support available
> Get answers now

60 Seconds to First Dashboard

One command to install. Zero config. 850+ integrations documented.

Linux, Windows, K8s, Docker
Auto-discovers your stack
> Read our documentation

76,000+ Engineers Strong

615+ contributors. 1.5M daily downloads. One mission: simplify observability.

Per-Second. 90% Cheaper. Data Stays Home.

Side-by-side comparisons: costs, real-time granularity, and data sovereignty for every major tool.

See why teams switch from Datadog, Prometheus, Grafana, and more.

> Browse all comparisons
Edge-Native Observability, Born Open Source
Per-second visibility, ML on every metric, and data that never leaves your infrastructure.
Founded in 2016
615+ contributors worldwide
Remote-first, engineering-driven
Open source first
> Read our story
Promises We Publish—and Prove
12 principles backed by open code, independent validation, and measurable outcomes.
Open source, peer-reviewed
Zero config, instant value
Data sovereignty by design
Aligned pricing, no surprises
> See all 12 principles
Edge-Native, AI-Ready, 100% Open
76k+ stars. Full ML, AI, and automation—GPLv3+, not premium add-ons.
76,000+ GitHub stars
GPLv3+ licensed forever
ML on every metric, included
Zero vendor lock-in
> Explore our open source
Build Real-Time Observability for the World
Remote-first team shipping per-second monitoring with ML on every metric.
Remote-first, fully distributed
Open source (76k+ stars)
Challenging technical problems
Your code on millions of systems
> See open roles
Meet the Team Behind Netdata
Conferences, meetups, and tradeshows where you can see Netdata in action and talk to the engineers who build it.
Live demos and deep dives
Book 1-on-1 meetings
Talks and panel sessions
Event recaps and photos
> See all events
Talk to a Netdata Human in <24 Hours
Sales, partnerships, press, or professional services—real engineers, fast answers.
Discuss your observability needs
Pricing and volume discounts
Partnership opportunities
Media and press inquiries
> Book a conversation
Your Data. Your Rules.
On-prem data, cloud control plane, transparent terms.
Trust & Scale
76,000+ GitHub Stars

One of the most popular open-source monitoring projects

SOC 2 Type 2 Certified

Enterprise-grade security and compliance

Data Sovereignty

Your metrics stay on your infrastructure

Validated
University of Amsterdam

"Most energy-efficient monitoring solution" — ICSOC 2023, peer-reviewed

ADASTEC (Autonomous Driving)

"Doesn't miss alerts—mission-critical trust for safety software"

Community Stats
615+ Contributors

Global community improving monitoring for everyone

1.5M+ Downloads/Day

Trusted by teams worldwide

GPLv3+ Licensed

Free forever, fully open source agent

Why Join?
Remote-First

Work from anywhere, async-friendly culture

Impact at Scale

Your work helps millions of systems

$ guides / proxysql / proxysql-set-session-variables-disable-multiplexing ▌

Operations Guides

ProxySQL SET statements disabling multiplexing: session state that pins connections

ProxySQL multiplexes N client sessions across M backend connections, where M is smaller than N. When an application issues a SET statement that changes session state, ProxySQL can no longer safely reuse that backend connection for other clients. The connection pins to that client session until the client disconnects.

This is correct behavior. A backend connection carrying a modified session variable (such as sql_mode or time_zone) would produce different query results if handed to another client expecting the default. ProxySQL detects this state and pins the connection to protect correctness.

The operational problem is that most teams never measure whether multiplexing is actually working. ORMs, connection libraries, and GUI tools routinely send SET commands that disable multiplexing silently. The proxy degrades to a near 1:1 client-to-backend ratio with no error, no log entry, and no alert. The capacity model that assumed 10:1 multiplexing becomes fiction.

What it is and why it matters

Multiplexing lets ProxySQL borrow a backend connection from the pool, route a query, return the result, and immediately return the connection for reuse by another client. As long as no session-specific state exists on the backend connection, this reuse is safe.

Session state breaks this model. When ProxySQL detects that a backend connection carries state that would affect query results for a different client, it disables multiplexing for that frontend session. The backend connection stays attached to that client. This is visible in stats_mysql_global as Client_Connections_hostgroup_locked increasing. That counter means “locked to a hostgroup”; sessions that disable multiplexing while mysql-set_query_lock_on_hostgroup=0 but remain routable are not all counted by it, so the pinning ratio can underreport in that configuration.

The critical behavioral detail: once multiplexing is disabled for a connection, it does not re-enable mid-session for most conditions. It stays pinned until the client disconnects. Only a few states are temporary: active transactions, SQL_LOG_BIN=0, and the auto-increment delay window. Everything else pins permanently.

This matters because backend pool sizing depends on the multiplexing ratio. With 500 connected clients and a 10:1 ratio, you need approximately 50 backend connections. If multiplexing collapses to 1:1, you need 500. A backend MySQL configured with max_connections=200 will reject connections, and queries start failing.

How it works

ProxySQL parses every query through its query processor. For SET statements and other session-modifying commands, it evaluates whether the change creates state that would be unsafe to carry over to a different client. If so, it sets an internal flag on the session that disables multiplexing.

flowchart TD
    A["Client sends query"] --> B{"SET or session state?"}
    B -- "No" --> C["Borrow backend conn
Route query
Return to pool"] B -- "Yes" --> D{"Recognized by
SET parser?"} D -- "Yes" --> E["Disable multiplexing
Pin backend conn"] D -- "No, unparseable" --> F["mysql-set_query_lock_on_hostgroup
Default: true"] F -- "true" --> E F -- "false" --> G["Disable multiplexing only
Routing still active"] E --> H["Conn stays pinned
until client disconnects"] G --> H C --> I["Multiplexing preserved"]

Statements and conditions that disable multiplexing

These SET statements are explicitly recognized by ProxySQL’s parser and disable multiplexing when executed:

  • SET SQL_SAFE_UPDATES
  • SET FOREIGN_KEY_CHECKS
  • SET UNIQUE_CHECKS
  • SET AUTO_INCREMENT_INCREMENT
  • SET AUTO_INCREMENT_OFFSET
  • SET GROUP_CONCAT_MAX_LEN
  • SET SQL_LOG_BIN=0
  • Any query containing user-defined variables (using @ syntax)

Beyond SET statements, multiplexing is also disabled by:

  • LOCK TABLES
  • GET_LOCK()
  • SQL_CALC_FOUND_ROWS
  • CREATE TEMPORARY TABLE
  • PREPARE via text protocol
  • Active transactions

SET NAMES is a special case: ProxySQL recognizes a simple, non-comma form, records the charset locally, and returns OK without pinning the backend connection. ProxySQL also rewrites certain SET SESSION character_set_server and SET SESSION character_set_results statements into SET NAMES.

Two hardcoded exceptions exist: SELECT @@tx_isolation and SELECT @@version do NOT disable multiplexing, even though they reference session variables. ProxySQL recognizes these as read-only introspection queries.

Temporary versus permanent pinning

ProxySQL distinguishes between permanent and temporary states:

Permanent (disabled until client disconnects):

  • User-defined variables (@var)
  • GET_LOCK()
  • SQL_CALC_FOUND_ROWS
  • Temporary tables
  • PREPARE (text protocol)

Temporary (disabled for a bounded window):

  • Active transactions (re-enabled after COMMIT or ROLLBACK)
  • SQL_LOG_BIN=0 (re-enabled after SET SQL_LOG_BIN=1)
  • Auto-increment delay window

The auto-increment delay

mysql-auto_increment_delay_multiplex defaults to 5. After any INSERT or UPDATE that touches an auto-increment column, ProxySQL disables multiplexing for the next 5 queries on that connection. This is a global variable affecting all hostgroups. The rationale is that the application may call LAST_INSERT_ID() immediately after the insert, and ProxySQL must ensure that call reaches the same backend.

This default is a silent multiplexing killer for write-heavy workloads. An application doing one insert followed by four reads will have multiplexing disabled for every cycle, regardless of whether it ever calls LAST_INSERT_ID(). Many teams discover this only after investigating why their backend connection count is unexpectedly high.

mysql-connection_delay_multiplex_ms (default 0) provides a time-based variant. When set to a non-zero value, multiplexing is disabled for that many milliseconds after any query completes.

Unparseable SET statements

ProxySQL’s SET parser handles a specific set of statements. When it encounters a SET it cannot parse (for example, SET lc_messages = 'en_US' sent by phpMyAdmin, or SET PROFILING = 1 sent by Navicat), behavior depends on mysql-set_query_lock_on_hostgroup.

mysql-set_query_lock_on_hostgroup defaults to true (1) since ProxySQL 2.0.6. When enabled, an unparseable SET statement causes both multiplexing AND query routing to be disabled. The client is locked to a single backend connection for the rest of the session.

Setting mysql-set_query_lock_on_hostgroup=0 prevents the hostgroup lock but does NOT re-enable multiplexing. The connection stays pinned to a backend but can be routed to different hostgroups. This can cause problems if the application uses temporary tables, since the temp table lives on one backend but subsequent queries might route to another.

Where it shows up in production

ORM connection initialization

Most ORMs (Hibernate, Django ORM, SQLAlchemy, ActiveRecord) send one or more SET statements when establishing a connection. Common patterns include SET NAMES, SET time_zone, SET sql_mode, and SET SESSION transaction_isolation. Whether each one pins depends on ProxySQL version and exact syntax. The result can be a backend connection pinned from the first query.

The multiplexing collapse cascade: a deployment or ORM upgrade adds session variable initialization to every connection. ProxySQL detects the state change and disables multiplexing for each affected session. Backend connections pin 1:1. With 500 clients, ProxySQL needs 500 backend connections instead of 50. Backend MySQL’s max_connections is hit. New queries fail with error 1040. ProxySQL shuns the backend. Remaining backends absorb the load, also hit their limits.

Multi-statement SET TRANSACTION regression

Issue #4896 remained open in the ProxySQL 3.0.9 milestone, so no fixed 2.6.x or 3.0.x release can be assumed.

In ProxySQL 2.6.0, the multi-statement pattern SET TRANSACTION ISOLATION LEVEL READ COMMITTED; BEGIN causes ProxySQL to set lock_hostgroup=true and disable multiplexing permanently for the session. The connection is not returned to the pool even after COMMIT. This is tracked as GitHub issue #4896.

GUI and admin tools

phpMyAdmin sends SET lc_messages = 'en_US' and SET collation_connection = '...' on connection. Navicat sends SET PROFILING = 1. Neither is recognized by ProxySQL’s parser. With the default mysql-set_query_lock_on_hostgroup=true, these tools pin connections for their entire session.

Session tracking in ProxySQL 3.0.8

ProxySQL 3.0.8 introduced mysql-session_track_variables, which defaults to 0 (disabled). When set to 1 (OPTIONAL) or 2 (ENFORCED), ProxySQL uses MySQL’s native session-state tracking protocol to detect variable changes that the SET parser cannot see. This catches SET commands issued inside stored procedures or with dynamic right-hand-side values. This complements the static SET parser rather than replacing it.

Detecting multiplexing disablement

The pinning ratio

The most direct signal is the pinning ratio: Client_Connections_hostgroup_locked / Client_Connections_connected. A healthy proxy should have most connections multiplexed. A pinning ratio above 50% sustained is serious degradation. A ratio approaching 1.0 means every client has a dedicated backend connection and multiplexing has fully collapsed.

-- Check current pinning ratio
SELECT
  (SELECT Variable_Value FROM stats_mysql_global WHERE Variable_Name = 'Client_Connections_hostgroup_locked') AS locked,
  (SELECT Variable_Value FROM stats_mysql_global WHERE Variable_Name = 'Client_Connections_connected') AS connected;

Per-session multiplexing state

stats_mysql_processlist includes an extended_info field (JSON) that shows why multiplexing was disabled for each session. Look for MultiplexDisabled: true and a status object with boolean flags for specific causes.

-- Find sessions with multiplexing disabled
SELECT user, db, hostgroup, time_ms, extended_info
FROM stats_mysql_processlist
WHERE extended_info != ''
ORDER BY time_ms DESC;

The multiplexing ratio

The broader multiplexing ratio is Client_Connections_connected / Server_Connections_connected. This tells you how effectively the proxy is pooling backend connections overall. Track this over time and correlate with application deployments.

Operational mitigations

Move session variables to server-side configuration

The most effective fix is to stop sending per-session SET commands for values that should be global. Character set, timezone, and sql_mode are typically the same for all sessions. Configure them on the MySQL server directly, or use ProxySQL’s mysql-init_connect to set them once when the backend connection is established, rather than having the application set them per session.

This moves the SET from the application layer (which triggers per-session pinning) to the proxy layer (which sets it on the backend connection at creation time, before any client uses it).

Query rules with multiplex override

mysql_query_rules has a multiplex column that accepts:

  • 0 - disable multiplexing for matching queries
  • 1 - enable multiplexing for matching queries
  • 2 - do not disable multiplexing for this specific query, even if it contains user variables

A query rule with multiplex=2 and a match pattern for a query containing @ variables tells ProxySQL to keep multiplexing despite the variable reference. Use this only when you are certain the variable does not affect correctness for other clients sharing the same backend connection.

Tune mysql-auto_increment_delay_multiplex

If your write workload does not rely on LAST_INSERT_ID(), you can reduce mysql-auto_increment_delay_multiplex from the default of 5 to 1 or 0. This restores multiplexing faster after writes.

-- Check current value
SELECT variable_name, variable_value FROM global_variables
WHERE variable_name = 'mysql-auto_increment_delay_multiplex';

-- Reduce delay (verify application does not use LAST_INSERT_ID first)
SET mysql-auto_increment_delay_multiplex = 1;
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;

Warning: reducing this value is safe only if your application never relies on LAST_INSERT_ID() returning the auto-increment value from the immediately preceding INSERT on the same connection. If LAST_INSERT_ID() is used, reducing the delay can route that call to a different backend and return a stale or zero value.

Enable session tracking (3.0.8+)

On ProxySQL 3.0.8 and later, enabling mysql-session_track_variables provides more complete detection of session state changes. This reduces false negatives where ProxySQL keeps multiplexing enabled for sessions that secretly changed state, and helps the parser catch SET statements inside stored procedures that it would otherwise miss.

Tradeoffs

The tension between multiplexing efficiency and session-state isolation is fundamental. ProxySQL must pin a connection when state exists because sharing it would produce incorrect results. The safe mitigations are narrow:

  • Eliminate unnecessary session state by moving global values to server defaults or mysql-init_connect.
  • Accept pinning for sessions that genuinely need state (transactions, temporary tables, user variables). Size your backend pool accordingly.
  • Track the pinning ratio. If it is 80% and your workload does not justify it, you have a configuration problem, not a capacity problem.

Signals to watch in production

SignalWhy it mattersWarning sign
Pinning ratio (hostgroup_locked / connected)Direct measure of multiplexing degradationSustained above 0.5
Multiplexing ratio (connected / server_connected)Overall pooling effectivenessTrending toward 1:1
ConnPool_get_conn_failureQueries unable to get backend connectionsAny sustained increase
Active_TransactionsConnections pinned by open transactionsHigh relative to client count
stats_mysql_processlist extended_infoPer-session reason for pinningSessions with MultiplexDisabled: true
Backend ConnUsed vs max_connectionsPool saturation from pinned connectionsApproaching limit

How Netdata helps

  • Correlates Client_Connections_hostgroup_locked with Client_Connections_connected to surface the pinning ratio as a trend, making gradual multiplexing collapse visible before backend pool exhaustion.
  • Tracks ConnPool_get_conn_failure as a leading indicator that pinned connections are consuming pool capacity.
  • Provides per-second granularity on backend connection metrics (ConnUsed, ConnFree, ConnOK, ConnERR), letting you pinpoint exactly when a deployment or ORM change started pinning connections.
  • Correlates multiplexing metrics with query digest changes and application deployment timing.