<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>ProxySQL Operations Guides on Netdata</title><link>https://www.netdata.cloud/guides/proxysql/</link><description>Recent content in ProxySQL Operations Guides on Netdata</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://www.netdata.cloud/guides/proxysql/index.xml" rel="self" type="application/rss+xml"/><item><title>How ProxySQL actually works in production: a mental model for operators</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-how-it-works-in-production/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-how-it-works-in-production/</guid><description>&lt;p>When ProxySQL fails in production, the layer where it fails determines what you see: connection exhaustion at the frontend pool, mis-routing in the query processor, pool starvation from multiplexing collapse, or false health decisions in the monitor module. Understanding these layers is prerequisite to debugging any of them.&lt;/p>
&lt;p>This article covers the request path from client connection to backend response, the components that make routing and pooling decisions, and the failure modes characteristic of each. The ProxySQL runbooks in this section build on the terminology and component relationships described here.&lt;/p></description></item><item><title>ProxySQL Active_Transactions pinning backend connections: multiplexing lost to open transactions</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-transactions-pinning-connections/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-transactions-pinning-connections/</guid><description>&lt;p>Active_Transactions is climbing in stats_mysql_global. ConnUsed is growing across backends. But the Questions rate hasn&amp;rsquo;t changed. You check for slow queries, backend errors, new traffic patterns. Nothing explains it.&lt;/p>
&lt;p>An open transaction pins a backend connection for its entire duration. ProxySQL disables multiplexing on that session until the client issues COMMIT or ROLLBACK. If transactions are long-running, or if sessions hold transactions open and never commit, backend connections accumulate in ConnUsed with no corresponding query throughput increase. ConnFree trends toward zero. Eventually queries queue, ConnPool_get_conn_failure starts climbing, and new queries hit the max connect timeout.&lt;/p></description></item><item><title>ProxySQL all replicas lagging: reads falling back onto the writer</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-all-replicas-lagging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-all-replicas-lagging/</guid><description>&lt;p>You configured a read/write split with replicas in the reader hostgroup, each with &lt;code>max_replication_lag&lt;/code> set to keep stale reads away from clients. Now all of them are SHUNNED and the reader hostgroup has zero ONLINE backends. Read queries are either failing or falling back onto the writer, which absorbs the full read and write workload.&lt;/p>
&lt;p>The cascade is the danger. As each replica lags and shuns, its traffic redirects to the remaining ONLINE replicas, increasing their load. The last standing replica absorbs all read traffic, its lag climbs, and it shuns too. The reader hostgroup goes empty and every read hits the writer.&lt;/p></description></item><item><title>ProxySQL backend connection pool exhausted: queries queuing for a free connection</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-backend-connection-pool-exhausted/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-backend-connection-pool-exhausted/</guid><description>&lt;p>Queries are queuing. Client-facing latency is climbing. Applications are reporting timeouts or &amp;ldquo;too many connections&amp;rdquo; errors. You look at ProxySQL&amp;rsquo;s backend pool and see &lt;code>ConnFree&lt;/code> at zero across one or more backends. The natural assumption is that the pool is exhausted.&lt;/p>
&lt;p>It might not be. &lt;code>ConnFree == 0&lt;/code> alone is not saturation. ProxySQL can still create new backend connections up to the &lt;code>max_connections&lt;/code> limit configured in &lt;code>mysql_servers&lt;/code>. The pool is under pressure, but ProxySQL has headroom to open more connections if the backend can accept them.&lt;/p></description></item><item><title>ProxySQL backend flapping between ONLINE and SHUNNED: monitor-induced oscillation</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-backend-flapping-online-shunned/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-backend-flapping-online-shunned/</guid><description>&lt;p>A ProxySQL backend alternating between ONLINE and SHUNNED more than 3 times in 10 minutes is a distinct failure pattern from a persistent SHUNNED state. The backend MySQL is healthy when checked directly, but ProxySQL&amp;rsquo;s monitor module produces false-negative health decisions on a jittery network path or under transient backend pressure. Each oscillation kills active connections, causing ConnERR spikes, latency spikes on surviving backends, and dips in Questions as traffic is disrupted and redistributed.&lt;/p></description></item><item><title>ProxySQL backend SHUNNED: why a healthy backend gets pulled out of rotation</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-backend-shunned/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-backend-shunned/</guid><description>&lt;p>You see &lt;code>status=SHUNNED&lt;/code> on a backend in &lt;code>stats_mysql_connection_pool&lt;/code> or &lt;code>runtime_mysql_servers&lt;/code>. The backend itself looks healthy when you connect directly. Queries may be failing or routing to fewer backends than expected, but the MySQL server is up and accepting connections.&lt;/p>
&lt;p>SHUNNED is ProxySQL&amp;rsquo;s protection mechanism, not a bug. When a backend generates more than &lt;code>mysql-shun_on_failures&lt;/code> connection errors within one second, or when its replication lag exceeds the configured &lt;code>max_replication_lag&lt;/code>, ProxySQL temporarily removes it from rotation. The backend typically returns to ONLINE on its own within &lt;code>mysql-shun_recovery_time_sec&lt;/code> (default 10 seconds), provided there is activity in the connection pool for that hostgroup.&lt;/p></description></item><item><title>ProxySQL backend_lagging_during_query and backend_offline_during_query: in-flight query failures</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-backend-lagging-offline-during-query/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-backend-lagging-offline-during-query/</guid><description>&lt;p>Two counters in &lt;code>stats_mysql_global&lt;/code> track queries that were in flight when the backend changed state underneath them. &lt;code>backend_lagging_during_query&lt;/code> counts queries that may have returned stale data. &lt;code>backend_offline_during_query&lt;/code> counts queries that failed. Both are cumulative since the last ProxySQL restart; a nonzero value after steady-state means something disrupted a running query.&lt;/p>
&lt;p>&lt;code>backend_offline_during_query&lt;/code> sustained increase is a TICKET by the playbook severity model. Each increment means a query was routed to a backend that then disappeared mid-execution: crash, network partition, SHUNNED transition, or operator-triggered OFFLINE_HARD. The diagnostic work is correlating counter increments with the specific backend transitions that caused them.&lt;/p></description></item><item><title>ProxySQL client connections at mysql-max_connections: frontend saturation and rejected clients</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-client-connections-max-reached/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-client-connections-max-reached/</guid><description>&lt;p>When &lt;code>Client_Connections_connected&lt;/code> reaches &lt;code>mysql-max_connections&lt;/code> (default 2048), ProxySQL stops accepting new client sessions. Already-connected clients continue working, but new sessions fail with &amp;ldquo;Too many connections&amp;rdquo; until existing ones close.&lt;/p>
&lt;p>This is a cliff-edge failure. There is no queueing at the frontend and no backpressure signal. Because &lt;code>mysql-max_connections&lt;/code> is a global limit shared across all users and hostgroups, a single application with a connection leak can consume every available slot and lock out every other user of the proxy.&lt;/p></description></item><item><title>ProxySQL Client_Connections_aborted rising: clients rejected or crashing on connect</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-client-connections-aborted/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-client-connections-aborted/</guid><description>&lt;p>&lt;code>Client_Connections_aborted&lt;/code> is a cumulative counter in &lt;code>stats_mysql_global&lt;/code>. What matters is the rate of change, not the absolute value. A sustained non-zero rate means clients are failing to establish or maintain connections through ProxySQL.&lt;/p>
&lt;p>The diagnostic question is whether aborts come from ProxySQL actively rejecting connections (authentication failures, connection limits), clients disconnecting improperly (timeouts, crashes, protocol mismatches), or the Client Error Limit feature banning source addresses. The &lt;code>Access_Denied_*&lt;/code> counters in the same stats table identify which. If aborts rise while the &lt;code>Questions&lt;/code> rate drops, clients are experiencing a real outage. If &lt;code>Questions&lt;/code> is stable, the impact may be limited to a subset of clients.&lt;/p></description></item><item><title>ProxySQL Cluster checksum mismatch: split-brain routing across proxy peers</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-cluster-checksum-mismatch/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-cluster-checksum-mismatch/</guid><description>&lt;p>ProxySQL Cluster peers exchange configuration via a pull-based sync protocol. When sync stalls or conflicts, peers diverge silently. Clients on proxy A get one set of backends; clients on proxy B get a different set. The same query routes to different hostgroups. Credentials differ. Query rules match differently.&lt;/p>
&lt;p>The detection signal is &lt;code>stats_proxysql_servers_checksums&lt;/code>. Each peer computes a checksum per config module. When peers agree, checksums match. When they disagree, &lt;code>diff_check&lt;/code> climbs for the affected module. Persistent mismatch means the cluster is not converging.&lt;/p></description></item><item><title>ProxySQL config changes not applied: the LOAD TO RUNTIME / SAVE TO DISK trap</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-config-changes-not-applied/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-config-changes-not-applied/</guid><description>&lt;p>You INSERT or UPDATE a row in &lt;code>mysql_servers&lt;/code>, &lt;code>mysql_users&lt;/code>, or &lt;code>mysql_query_rules&lt;/code> through the admin interface. The SQL succeeds with no error. But traffic behavior does not change. Or it works fine for a day, then ProxySQL restarts and everything reverts.&lt;/p>
&lt;p>The root cause is the three-layer configuration model. Every admin SQL change lands in MEMORY, the staging area. That change is not active until you explicitly run &lt;code>LOAD ... TO RUNTIME&lt;/code>. And it does not survive a restart until you explicitly run &lt;code>SAVE ... TO DISK&lt;/code>. No transition is automatic. No error fires if you skip a step.&lt;/p></description></item><item><title>ProxySQL config lost after restart: runtime never saved to disk</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-config-lost-after-restart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-config-lost-after-restart/</guid><description>&lt;p>ProxySQL separates live configuration from persistent configuration. If you apply a change to RUNTIME but never run &lt;code>SAVE ... TO DISK&lt;/code>, that change survives only until the next restart. When ProxySQL restarts, it loads from &lt;code>proxysql.db&lt;/code> on disk, and everything unsaved is gone.&lt;/p>
&lt;p>The three-layer model means making a change live and making it durable are two separate, explicit steps. There is no single &amp;ldquo;save everything&amp;rdquo; command. If you forget any module&amp;rsquo;s &lt;code>SAVE ... TO DISK&lt;/code>, that module reverts on the next restart.&lt;/p></description></item><item><title>ProxySQL connection storm after restart: an empty pool meeting a mass reconnect</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-connection-storm-after-restart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-connection-storm-after-restart/</guid><description>&lt;p>ProxySQL just restarted. Within seconds, client connections pour in. The backend pool is empty, so every query demands a new &lt;code>connect()&lt;/code> to MySQL. &lt;code>Client_Connections_created&lt;/code> and backend &lt;code>ConnOK&lt;/code> spike in lockstep. The backend&amp;rsquo;s CPU jumps as it authenticates connections and spins up threads instead of executing queries. If TLS is enabled, each handshake multiplies the cost.&lt;/p>
&lt;p>The storm is usually self-resolving in 30 to 120 seconds as the pool fills and steady-state multiplexing resumes. During that window, latency spikes, queries may queue, and if backend &lt;code>max_connections&lt;/code> is exhausted, new connections fail outright with MySQL error 1040.&lt;/p></description></item><item><title>ProxySQL ConnERR climbing: backend connection errors and how to localise them</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-connerr-backend-connection-errors/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-connerr-backend-connection-errors/</guid><description>&lt;p>&lt;code>ConnERR&lt;/code> is a per-backend cumulative counter in &lt;code>stats_mysql_connection_pool&lt;/code> that increments every time ProxySQL fails to open a connection to a backend MySQL server. Because it is cumulative, a single nonzero value is historical: it means at least one attempt failed since the last stats reset or ProxySQL restart. Take two readings 10 to 30 seconds apart and compute the delta. A positive sustained delta means ProxySQL is actively failing to establish backend connections right now.&lt;/p></description></item><item><title>ProxySQL ConnPool_get_conn_failure rising: the most direct pool-starvation signal</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-connpool-get-conn-failure/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-connpool-get-conn-failure/</guid><description>&lt;p>When &lt;code>ConnPool_get_conn_failure&lt;/code> in &lt;code>stats_mysql_global&lt;/code> starts climbing, ProxySQL&amp;rsquo;s internal connection pool failed to hand a backend connection to a worker thread on request. ProxySQL asked the pool for a connection to a hostgroup and got nothing back. That makes it the most actionable signal for backend pool starvation, more direct than watching &lt;code>ConnUsed&lt;/code> and &lt;code>ConnFree&lt;/code> in isolation.&lt;/p>
&lt;p>This counter does not mean clients are seeing errors. It increments on every internal pool-lookup miss, even if ProxySQL subsequently creates a new backend connection or retries successfully. A spike of hundreds of thousands of failures in a few seconds can correspond to zero client-visible errors. What it tells you: the pool was pressured enough to miss, and sustained rising rates mean that pressure is not resolving on its own.&lt;/p></description></item><item><title>ProxySQL error 1040 Too many connections: the backend MySQL rejecting the pool</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-too-many-connections/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-too-many-connections/</guid><description>&lt;p>Your application queries are failing with &lt;code>ERROR 1040 (HY000): Too many connections&lt;/code>. ProxySQL is up, the admin interface responds, and some backends show ONLINE. But queries against certain hostgroups error out, and the problem is spreading. The error is coming from the backend MySQL server itself, not from ProxySQL&amp;rsquo;s own pool ceiling.&lt;/p>
&lt;p>Four independent limits can produce error 1040 or something visually identical to the client: ProxySQL&amp;rsquo;s global &lt;code>mysql-max_connections&lt;/code> (default 2048), per-user &lt;code>max_connections&lt;/code> in &lt;code>mysql_users&lt;/code>, per-backend &lt;code>max_connections&lt;/code> in &lt;code>mysql_servers&lt;/code>, and the backend MySQL&amp;rsquo;s server-level &lt;code>max_connections&lt;/code>. When the backend&amp;rsquo;s limit is hit, ProxySQL tries to open a connection, the backend refuses, &lt;code>ConnERR&lt;/code> climbs, and the backend may be shunned after enough failures. This article covers that fourth case.&lt;/p></description></item><item><title>ProxySQL error 1045 Access denied for user: credential rotation not propagated</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-access-denied-for-user/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-access-denied-for-user/</guid><description>&lt;p>Error 1045 is MySQL&amp;rsquo;s &amp;ldquo;Access denied for user.&amp;rdquo; In a ProxySQL environment it can surface at three independent authentication boundaries, and fixing the wrong one wastes the incident window. The typical trigger is a password rotation applied to one layer (backend MySQL, application config, or ProxySQL itself) without propagating it through ProxySQL&amp;rsquo;s three-layer configuration model.&lt;/p>
&lt;p>The error string carries an immediate clue. &lt;code>(using password: YES)&lt;/code> means a password was sent but did not match. &lt;code>(using password: NO)&lt;/code> means no password was sent at all, which can indicate a client misconfiguration or, rarely, a version-specific bug. Most credential rotation incidents produce &lt;code>(using password: YES)&lt;/code>.&lt;/p></description></item><item><title>ProxySQL error 1290 The MySQL server is running with the --read-only option</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-server-read-only-option/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-server-read-only-option/</guid><description>&lt;p>MySQL error 1290 in a ProxySQL environment is almost always a read/write split misconfiguration: a write query that should have gone to the primary was routed to a read-only replica, and the replica refused it. In ProxySQL, this surfaces in &lt;code>stats_mysql_errors&lt;/code> with &lt;code>errno=1290&lt;/code>, attributed to a reader hostgroup backend. The proxy is not malfunctioning. It is routing queries exactly as its &lt;code>mysql_query_rules&lt;/code> dictate. The rules are wrong.&lt;/p>
&lt;p>The fix has two phases: stop the bleeding by deactivating the offending rule, then fix the rule chain so writes route correctly.&lt;/p></description></item><item><title>ProxySQL error 1317 Query execution was interrupted: timeout-killed queries</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-query-execution-interrupted/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-query-execution-interrupted/</guid><description>&lt;p>Error 1317 (&amp;ldquo;Query execution was interrupted&amp;rdquo;) means ProxySQL killed a backend query that exceeded a configured timeout. When a query runs past its limit, ProxySQL opens a separate connection to the backend, issues &lt;code>KILL QUERY &amp;lt;thread_id&amp;gt;&lt;/code>, and returns error 1317 to the client.&lt;/p>
&lt;p>The question is whether 1317 is a healthy safety valve catching runaway queries, or a symptom of backend degradation killing queries that should normally succeed. Raising a timeout is cheap, but masking backend slowness with a higher ceiling only delays the problem.&lt;/p></description></item><item><title>ProxySQL error 9001 Max connect timeout reached while reaching hostgroup</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-max-connect-timeout-reached-hostgroup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-max-connect-timeout-reached-hostgroup/</guid><description>&lt;p>Your application is receiving MySQL error 9001 (HY000): &amp;ldquo;Max connect timeout reached while reaching hostgroup N after Mms.&amp;rdquo; ProxySQL tried to obtain a working backend connection for the client query and failed within the configured timeout window (&lt;code>mysql-connect_timeout_server_max&lt;/code>, default 10000ms).&lt;/p>
&lt;p>Every backend in the target hostgroup is either down, SHUNNED, OFFLINE, or saturated to the point where no connection could be borrowed or created in time. Queries are failing.&lt;/p>
&lt;p>The &amp;ldquo;after Mms&amp;rdquo; portion tells you how long ProxySQL spent trying. If M is close to your &lt;code>mysql-connect_timeout_server_max&lt;/code> value, ProxySQL exhausted the full retry window. If M is 0, the timeout fired immediately, which can indicate a configuration or version-specific issue rather than a genuine backend problem.&lt;/p></description></item><item><title>ProxySQL Galera and Group Replication hostgroups: automatic writer/reader routing</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-galera-group-replication-hostgroups/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-galera-group-replication-hostgroups/</guid><description>&lt;p>ProxySQL&amp;rsquo;s &lt;code>mysql_galera_hostgroups&lt;/code> and &lt;code>mysql_group_replication_hostgroups&lt;/code> tables automate writer/reader hostgroup assignment for synchronous replication clusters. Instead of manually assigning nodes to writer and reader hostgroups in &lt;code>mysql_servers&lt;/code>, you define the hostgroup IDs and let the monitor module reassign nodes based on live cluster topology. When a Galera cluster&amp;rsquo;s active writer shifts during a split-brain resolution, or a Group Replication member wins a primary election, ProxySQL re-routes traffic without operator intervention.&lt;/p>
&lt;p>Both cluster types expose their own state. Galera nodes report &lt;code>wsrep_local_state&lt;/code>, &lt;code>wsrep_desync&lt;/code>, and &lt;code>wsrep_reject_queries&lt;/code>. Group Replication nodes report membership state and role through &lt;code>performance_schema.replication_group_members&lt;/code> (MySQL 8.0+) or a user-installed &lt;code>sys.gr_member_routing_candidate_status&lt;/code> view on older versions. ProxySQL polls these on its monitor interval and moves nodes between writer, reader, backup, and offline hostgroups. This differs from async replication read/write splitting, where ProxySQL relies on &lt;code>read_only&lt;/code> checks against statically configured backends. With these tables, the cluster&amp;rsquo;s own state source is authoritative.&lt;/p></description></item><item><title>ProxySQL hostgroup_locked connections: reading the multiplexing-health ratio</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-hostgroup-locked-connections/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-hostgroup-locked-connections/</guid><description>&lt;p>ProxySQL exists to multiplex: N client connections served by M backend connections, where M is ideally much less than N. When that ratio degrades, the proxy adds latency without providing pooling benefit. The single metric that captures this degradation is &lt;code>Client_Connections_hostgroup_locked&lt;/code> divided by &lt;code>Client_Connections_connected&lt;/code>.&lt;/p>
&lt;p>ORMs and connection libraries can silently disable multiplexing by emitting &lt;code>SET&lt;/code> commands or opening transactions on every connection. The proxy runs at near 1:1 for months, and the capacity plan that assumed 10:1 multiplexing is fiction.&lt;/p></description></item><item><title>ProxySQL memory growth and OOM: what drives RSS and how to tell a leak from load</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-memory-growth-oom/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-memory-growth-oom/</guid><description>&lt;p>When ProxySQL RSS climbs toward system limits, the first question is whether growth is load-driven (more connections, cached result sets, or query digests) or a genuine leak. The fixes are different: load-driven growth requires tuning buffer sizes, cache limits, or digest configuration. A leak requires identifying the subsystem that is not releasing memory and possibly upgrading to a patched version.&lt;/p>
&lt;p>This guide covers the memory consumers inside ProxySQL, the admin-table queries that break down where bytes are going, and the correlation tests that separate a leak from load.&lt;/p></description></item><item><title>ProxySQL monitor check failures: connect, ping, read-only, and replication-lag probes failing</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-monitor-check-failures/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-monitor-check-failures/</guid><description>&lt;p>When &lt;code>MySQL_Monitor_connect_check_ERR&lt;/code>, &lt;code>MySQL_Monitor_ping_check_ERR&lt;/code>, &lt;code>MySQL_Monitor_read_only_check_ERR&lt;/code>, or &lt;code>MySQL_Monitor_replication_lag_check_ERR&lt;/code> start climbing in &lt;code>stats_mysql_global&lt;/code>, the ProxySQL monitor module has lost visibility into one or more backends. These counters are a leading indicator. The actual user-facing impact shows up later as backend status transitions, typically SHUNNED, when ProxySQL can no longer verify a backend is healthy and pulls it from rotation.&lt;/p>
&lt;p>The monitor module runs four independent check types, each on its own schedule, each writing results to its own log table in the &lt;code>monitor&lt;/code> schema. Monitor connections use credentials from &lt;code>mysql-monitor_username&lt;/code> and &lt;code>mysql-monitor_password&lt;/code>, which are completely separate from the data-plane credentials in &lt;code>mysql_users&lt;/code>. This separation is the single most common source of confusion: application traffic can continue flowing normally while the monitor silently fails in the background.&lt;/p></description></item><item><title>ProxySQL monitor password invalid: healthy backends shunned because health checks fail</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-monitor-password-invalid/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-monitor-password-invalid/</guid><description>&lt;p>Backends are going SHUNNED, but direct connections to the MySQL servers work fine. The servers are up, responsive, and serving queries normally. Yet ProxySQL has pulled them from rotation.&lt;/p>
&lt;p>The backends are not the problem. The Monitor module is.&lt;/p>
&lt;p>When &lt;code>mysql-monitor_password&lt;/code> is wrong, expired, or out of sync, every monitor connect and ping check fails with an authentication error. ProxySQL interprets these failures as backend health failures. After &lt;code>mysql-monitor_ping_max_failures&lt;/code> (default: 3) consecutive ping failures, it SHUNS the backend and closes its connections. The backend is healthy, but ProxySQL cannot verify that, so it stops sending traffic.&lt;/p></description></item><item><title>ProxySQL monitoring checklist: the signals every production proxy needs</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-monitoring-checklist/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-monitoring-checklist/</guid><description>&lt;p>ProxySQL sits between your applications and MySQL-compatible backends, fully parsing the MySQL wire protocol and making per-query routing, caching, and connection-pooling decisions.&lt;/p>
&lt;p>This checklist defines the monitoring signals every ProxySQL deployment needs, organized into four maturity levels: survival, operational, mature, and expert. Each level builds on the previous one. If you track query digest anomalies at level 4 but cannot tell whether your backends are ONLINE at level 1, you are debugging blind.&lt;/p></description></item><item><title>ProxySQL monitoring maturity model: from survival to expert</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-monitoring-maturity-model/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-monitoring-maturity-model/</guid><description>&lt;p>ProxySQL deployments tend to land at one of two monitoring extremes: a process check and a port check, or a full dashboard nobody acts on. The gap between &amp;ldquo;is it running&amp;rdquo; and &amp;ldquo;is it healthy&amp;rdquo; is where most incidents live. This article maps four monitoring maturity levels, each adding signals that catch failure modes the previous level cannot.&lt;/p>
&lt;p>Use this as a self-assessment. Find the highest level where you have every signal covered, then look at what the next level adds. All signals come from ProxySQL&amp;rsquo;s own &lt;code>stats_*&lt;/code> tables and host-level metrics, queryable through the admin interface on port 6032. &lt;!-- TODO: verify "the Prometheus exporter on port 6070" -- ProxySQL has no built-in Prometheus exporter; port depends on which external exporter is deployed -->&lt;/p></description></item><item><title>ProxySQL multiplexing collapse: when connection pooling silently drops to 1:1</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-multiplexing-collapse/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-multiplexing-collapse/</guid><description>&lt;p>You deployed ProxySQL for connection pooling. The capacity plan assumed a 10:1 multiplexing ratio: 1000 client connections served by 100 backend connections. Instead, the backend pool keeps filling up, &lt;code>ConnUsed&lt;/code> tracks the client count almost linearly, and the MySQL backend is hitting &lt;code>max_connections&lt;/code> even though traffic has not changed. ProxySQL is running, backends are ONLINE, queries are succeeding, but the proxy is providing zero pooling benefit. It has silently degraded into a 1:1 connection relay with overhead.&lt;/p></description></item><item><title>ProxySQL MySQL_Monitor_Workers is zero: health checks stopped and status is stale</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-monitor-workers-zero/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-monitor-workers-zero/</guid><description>&lt;p>When &lt;code>MySQL_Monitor_Workers&lt;/code> in &lt;code>stats_mysql_global&lt;/code> reads zero and stays there, ProxySQL&amp;rsquo;s monitor module has stopped probing backends. No connect checks, no ping checks, no read-only checks, no replication lag checks. The status values in &lt;code>runtime_mysql_servers&lt;/code> and &lt;code>stats_mysql_connection_pool&lt;/code> are frozen at whatever they were when the last check ran. A backend that crashed five minutes ago still shows ONLINE.&lt;/p>
&lt;p>This state is silent. The data plane keeps routing queries. Nothing crashes, nothing logs an error visible to most dashboards. The only outward signal is that ProxySQL stops reacting to real backend health changes: a writer failover goes undetected, a lagging replica stays in rotation, a dead backend keeps receiving queries until clients time out.&lt;/p></description></item><item><title>ProxySQL OFFLINE_SOFT vs OFFLINE_HARD vs SHUNNED: what each backend status means</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-backend-offline-hard-soft/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-backend-offline-hard-soft/</guid><description>&lt;p>ProxySQL tracks four backend statuses: ONLINE, SHUNNED, OFFLINE_SOFT, and OFFLINE_HARD. OFFLINE_SOFT and OFFLINE_HARD are operator-controlled drain states. SHUNNED is automatic and monitor-driven. The distinction determines who sets the state, how it recovers, and which table shows the truth.&lt;/p>
&lt;p>A backend that is OFFLINE_SOFT is deliberately draining and will not recover until you change it back. A backend that is SHUNNED is temporarily avoided by the monitor and self-corrects. Conflating the two leads to unnecessary intervention (restarting backends that would recover on their own) or dangerous neglect (assuming a draining backend will fix itself during a failover).&lt;/p></description></item><item><title>ProxySQL per-user max_connections: one application starving the shared proxy</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-per-user-max-connections/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-per-user-max-connections/</guid><description>&lt;p>ProxySQL enforces two layers of frontend connection limits: a global ceiling (&lt;code>mysql-max_connections&lt;/code>, default 2048) and an optional per-user cap (&lt;code>mysql_users.max_connections&lt;/code>, default 10000). The per-user cap is the one most teams leave at default, which is effectively no limit. A single application with a connection leak or misconfigured pool can consume connections toward the global ceiling. Once the global pool is exhausted, every other application sharing that ProxySQL instance is denied new connections.&lt;/p></description></item><item><title>ProxySQL query cache hit rate dropped: backend load about to surge</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-query-cache-hit-rate-dropped/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-query-cache-hit-rate-dropped/</guid><description>&lt;p>A query cache hit rate drop is a leading indicator. By the time backend CPU spikes or the connection pool saturates, the cache has already stopped absorbing read load.&lt;/p>
&lt;p>ProxySQL&amp;rsquo;s query cache is a TTL-based in-memory result set cache with no invalidation on data change. When it works, it shields backends from repetitive read queries. When it stops, every previously-cached query becomes a real backend query, and backend load increases proportionally to the miss delta.&lt;/p></description></item><item><title>ProxySQL query cache memory growth: high-cardinality caching toward OOM</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-query-cache-memory-growth/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-query-cache-memory-growth/</guid><description>&lt;p>&lt;code>Query_Cache_Memory_bytes&lt;/code> sits at the &lt;code>mysql-query_cache_size_MB&lt;/code> ceiling, the purge rate is rising, and hit rate is dropping despite a full cache. This is the high-cardinality caching pattern: the cache is churning through unique keys that never repeat, and the soft limit cannot keep RSS bounded because it only triggers eviction of expired entries.&lt;/p>
&lt;p>The worst case is OOM kill. The kernel terminates ProxySQL, clients disconnect, and on restart the cache is empty, stats tables reset, and the cycle starts again. If you are mid-incident, run &lt;code>PROXYSQL FLUSH QUERY CACHE&lt;/code> for immediate relief. Then fix the root cause before memory grows back.&lt;/p></description></item><item><title>ProxySQL query cache stampede: a hot entry expires and the herd hits the backend</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-query-cache-stampede/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-query-cache-stampede/</guid><description>&lt;p>Backend connection pool usage spikes suddenly. Backend latency climbs. Query cache hit rate drops to near zero for a brief window, then recovers minutes later. If this pattern repeats at regular intervals, a cache stampede is the likely cause.&lt;/p>
&lt;p>ProxySQL&amp;rsquo;s query cache is stale-read, keyed by query digest, user, and schema. It uses TTL-based expiration only. There is no request coalescing, no lock-based regeneration, and no mechanism to ensure only one request repopulates the cache after a miss. When a hot entry expires, every concurrent request for that query independently hits the backend MySQL.&lt;/p></description></item><item><title>ProxySQL query digest memory growth: stats_mysql_query_digest growing unbounded</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-query-digest-memory-growth/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-query-digest-memory-growth/</guid><description>&lt;p>ProxySQL&amp;rsquo;s &lt;code>stats_mysql_query_digest&lt;/code> table grows without bound. There is no built-in memory cap. On high-cardinality workloads where queries embed unique identifiers (timestamps, UUIDs, session tokens, savepoint names), the digest hash table can balloon to gigabytes, tracked as &lt;code>query_digest_memory&lt;/code> in &lt;code>stats_memory_metrics&lt;/code>.&lt;/p>
&lt;p>The symptoms: ProxySQL runs normally for days or weeks, then develops periodic latency spikes that correlate with monitoring scrapes. RSS creeps upward. In extreme cases, the process is OOM-killed. The digest table is rarely inspected for size, only for query content, so the root cause stays hidden.&lt;/p></description></item><item><title>ProxySQL query rule CPU overload: expensive regex saturating the worker threads</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-query-rule-cpu-overload/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-query-rule-cpu-overload/</guid><description>&lt;p>ProxySQL host CPU is pegged. Client query latency is climbing. But the MySQL backends are idle: &lt;code>ConnFree&lt;/code> is greater than zero across the pool, backend ping latency is normal, and there are no slow queries on the database side. The proxy itself is the bottleneck.&lt;/p>
&lt;p>When the proxy&amp;rsquo;s worker threads are saturated, every query slows down uniformly regardless of which backend it targets or how complex the SQL is. The symptom looks like a backend problem from the application&amp;rsquo;s perspective, but the databases are fine.&lt;/p></description></item><item><title>ProxySQL query rule not matching: zero hits, silent regex failures, and broken routing</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-query-rule-not-matching/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-query-rule-not-matching/</guid><description>&lt;p>A critical query rule (write routing, read/write splitting, query caching) shows zero hits in &lt;code>stats_mysql_query_rules&lt;/code>. Queries that should match it are falling through to the default hostgroup or a catch-all rule instead. The rule exists in &lt;code>runtime_mysql_query_rules&lt;/code>, it looks correct, and there are no errors in the ProxySQL log.&lt;/p>
&lt;p>The proxy parsed your rule, compiled the regex, and loaded it to runtime. It just never matches any query. Meanwhile, writes may be landing on read-only replicas (MySQL error 1290) or reads may be piling onto the writer hostgroup unnecessarily. If replicas are not configured read_only, writes can silently succeed on a non-primary backend and never reach the authoritative source.&lt;/p></description></item><item><title>ProxySQL query rule order and apply=1: how rule chains silently mis-route</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-query-rules-order-apply/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-query-rules-order-apply/</guid><description>&lt;p>ProxySQL query rules look deceptively simple: write a regex, point it at a hostgroup, done. But &lt;code>mysql_query_rules&lt;/code> is an ordered chain, and the chain&amp;rsquo;s behavior depends on three interacting variables that most operators never think about together: &lt;code>rule_id&lt;/code> order, the &lt;code>apply&lt;/code> flag, and &lt;code>flagIN&lt;/code>/&lt;code>flagOUT&lt;/code> chaining. Get any of these wrong and queries route to the wrong backend silently, with no error.&lt;/p>
&lt;p>The mis-route may not manifest until weeks after the configuration change. A rule chain can work correctly by accident, because a later rule happens to set the same hostgroup the operator intended. Then someone adds a new rule, the last match changes, and writes start landing on read-only replicas.&lt;/p></description></item><item><title>ProxySQL read/write split misrouting: writes silently reaching replicas</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-read-write-split-misrouting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-read-write-split-misrouting/</guid><description>&lt;p>ProxySQL read/write split routes queries based on &lt;code>mysql_query_rules&lt;/code> evaluated in ascending &lt;code>rule_id&lt;/code> order. When that chain is misconfigured, write queries can match a read-routing rule and land on a replica hostgroup. If the replica enforces &lt;code>super_read_only&lt;/code>, the write fails with MySQL error 1290 and the client sees an error. If it does not, the write succeeds on the replica, never reaches the primary, and the client receives a success response. Data diverges silently with no error at any layer.&lt;/p></description></item><item><title>ProxySQL replica shunned for replication lag: max_replication_lag and stale-read protection</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-replica-shunned-replication-lag/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-replica-shunned-replication-lag/</guid><description>&lt;p>When a MySQL replica falls behind its primary, ProxySQL&amp;rsquo;s monitor module detects the lag and pulls that replica out of read rotation by marking it SHUNNED. This is deliberate stale-read protection: applications should not read from a replica that has not applied recent writes, because they would see stale results or violate read-after-write consistency.&lt;/p>
&lt;p>The mechanism is governed by &lt;code>max_replication_lag&lt;/code>, a per-backend column in &lt;code>mysql_servers&lt;/code> measured in seconds. When the monitor&amp;rsquo;s replication lag check finds &lt;code>Seconds_Behind_Master&lt;/code> exceeding that threshold, the backend is shunned until lag drops back below it. The tradeoff is direct: shunning protects consistency but reduces read capacity. In a topology with two or three replicas, losing one shifts 33 to 50 percent of read traffic onto the remaining backends, which can push them over the same threshold.&lt;/p></description></item><item><title>ProxySQL runtime vs memory drift: the unapplied change that surfaces on restart</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-runtime-vs-memory-drift/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-runtime-vs-memory-drift/</guid><description>&lt;p>ProxySQL&amp;rsquo;s three-layer configuration model makes changes safe and atomic, but every edit requires explicit promotion through two transitions. A missed step creates silent drift between what is staged (MEMORY), what is active (RUNTIME), and what persists on disk (DISK). The drift produces no error, no log entry, and no metric. The first visible symptom is often a restart that reverts to a stale configuration.&lt;/p>
&lt;p>Two failure patterns dominate. First: an operator edits a MEMORY table but forgets &lt;code>LOAD ... TO RUNTIME&lt;/code>. The change sits staged but inactive. The admin interface accepted it without complaint, so the operator assumes it took effect. Later, a restart reloads from DISK and the unsaved MEMORY change is discarded. Second: the operator loads to RUNTIME (the change takes effect) but forgets &lt;code>SAVE ... TO DISK&lt;/code>. Everything works until a restart, and the change vanishes. Because RUNTIME matched MEMORY during that window, there was no signal that DISK was behind. Neither form of drift has a native ProxySQL metric. Detection requires comparing MEMORY tables against RUNTIME tables directly.&lt;/p></description></item><item><title>ProxySQL Server_Connections_delayed above zero: queries waiting on the backend pool</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-server-connections-delayed/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-server-connections-delayed/</guid><description>&lt;p>When &lt;code>Server_Connections_delayed&lt;/code> in ProxySQL&amp;rsquo;s &lt;code>stats_mysql_global&lt;/code> table climbs above zero, queries are waiting for a backend connection that was not immediately available. This is not an error counter. It is a pressure signal: ProxySQL&amp;rsquo;s backend connection pool could not instantly satisfy a connection request, so the requesting session had to wait. A brief blip during a traffic burst is normal. A sustained increase means the pool is undersized, multiplexing has degraded, or backends are disappearing from rotation faster than the pool can adapt.&lt;/p></description></item><item><title>ProxySQL SET statements disabling multiplexing: session state that pins connections</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-set-session-variables-disable-multiplexing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-set-session-variables-disable-multiplexing/</guid><description>&lt;p>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.&lt;/p>
&lt;p>This is correct behavior. A backend connection carrying a modified session variable (such as &lt;code>sql_mode&lt;/code> or &lt;code>time_zone&lt;/code>) would produce different query results if handed to another client expecting the default. ProxySQL detects this state and pins the connection to protect correctness.&lt;/p></description></item><item><title>ProxySQL Too many open files: file descriptor exhaustion takes down connections and health checks</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-too-many-open-files/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-too-many-open-files/</guid><description>&lt;p>ProxySQL hits a host-level cliff that its own stats tables cannot see. Every client, backend, monitor, and admin session consumes a file descriptor. When the process reaches its &lt;code>RLIMIT_NOFILE&lt;/code> ceiling, &lt;code>accept()&lt;/code> and &lt;code>connect()&lt;/code> fail simultaneously: new client connections are rejected, backend connections cannot be established, and the monitor module cannot open sockets to check backend health. The proxy appears to hang while the process keeps running.&lt;/p>
&lt;p>The first visible symptom is often not a connection error. ProxySQL&amp;rsquo;s internal SQLite database also needs file descriptors. When the pool is exhausted, SQLite fails first with &lt;code>unable to open database file&lt;/code>, which operators frequently misdiagnose as disk corruption or a permissions problem. Connection errors surface after that: &lt;code>2004: Can't create TCP/IP socket (24)&lt;/code> in the ProxySQL log, where errno 24 is &lt;code>EMFILE&lt;/code>.&lt;/p></description></item><item><title>ProxySQL worker thread CPU saturation: mysql-threads as a hard parallelism ceiling</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-cpu-thread-saturation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-cpu-thread-saturation/</guid><description>&lt;p>When every query through ProxySQL slows down simultaneously, regardless of backend or query digest, the proxy itself is the bottleneck. The most common cause is worker thread CPU saturation: all &lt;code>mysql-threads&lt;/code> worker threads are pegged at or near 100% CPU, and their epoll event loops can no longer service connections without adding queuing delay.&lt;/p>
&lt;p>&lt;code>mysql-threads&lt;/code> (default 4) cannot be changed at runtime. It is set at startup and caps query-processing parallelism absolutely. Adding backends or client connections does not raise this ceiling.&lt;/p></description></item><item><title>ProxySQL zero ONLINE backends in a hostgroup: total outage for that traffic class</title><link>https://www.netdata.cloud/guides/proxysql/proxysql-no-online-backends-hostgroup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/proxysql/proxysql-no-online-backends-hostgroup/</guid><description>&lt;p>When ProxySQL reports zero ONLINE backends in a hostgroup, every query routed to that hostgroup fails immediately. If the affected hostgroup handles writes, all INSERT, UPDATE, and DELETE operations fail. If it is a reader hostgroup, read queries either error out or, depending on query rules, flood a writer hostgroup not sized for that load.&lt;/p>
&lt;p>Clients see the error &lt;!-- TODO: verify exact wording across ProxySQL versions --> &amp;ldquo;Hostgroup X has no servers available!&amp;rdquo; or generic connection timeouts. Application error rates spike. Questions drops toward zero while Client_Connections_aborted rises.&lt;/p></description></item></channel></rss>