Skip to content

Commit 8b60052

Browse files
committed
Added Known issues, recommended MVU approach and minor change to release notes
1 parent 0940b69 commit 8b60052

3 files changed

Lines changed: 43 additions & 5 deletions

File tree

articles/mysql/flexible-server/how-to-upgrade-faq.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,32 @@ Until the upstream fix is available, take the following precautions before and a
6666
- Set the session or server `time_zone` explicitly, and write datetime values without an inline offset so the server applies the configured timezone consistently.
6767
- Validate a representative sample of newly inserted rows after the upgrade to confirm that stored values match the expected values.
6868

69+
### Performance regression for IN() queries on indexed string columns after upgrading to 8.4
70+
71+
In MySQL 8.4, a query that uses an `IN()` predicate on an indexed non-binary string column (for example, `VARCHAR` with a `utf8mb4` or `utf8mb3` non-binary collation such as `utf8mb4_0900_ai_ci`) can deteriorate to a full table or index scan when at least one value in the `IN()` list is longer than the column's defined length, or longer than a prefix index's defined length. Queries that previously used efficient index range scans on the same data in MySQL 5.7 or 8.0 might experience performance degradation after upgrading to 8.4.
72+
73+
This is a known MySQL community bug. For more information, see [MySQL Bug #118009](https://bugs.mysql.com/bug.php?id=118009).
74+
75+
#### Resolution
76+
77+
Until the fix is available on Azure Database for MySQL Flexible Server, use one or more of the following mitigations:
78+
79+
- Audit application queries that use `IN()` on indexed string columns, and filter or truncate values on the application side so that none of the values exceed the column's defined length (or the prefix index length).
80+
- For affected queries, split the `IN()` list into multiple shorter `IN()` lists or `OR` conditions that exclude oversized values, so the optimizer can continue to use index range scans.
81+
- Use binary collations (for example, `utf8mb4_bin`) or the `latin1` character set for affected columns, because these collations aren't impacted by this regression. Evaluate the change against your application's sorting and comparison requirements before adopting it.
82+
- Review query plans by using `EXPLAIN` after the upgrade to identify queries that have switched from `range` to `ALL` or `index` access, and prioritize them for mitigation.
83+
84+
### Slowness or high CPU usage for SELECT queries with very large IN() lists after upgrading to 8.0 or 8.4
85+
86+
After upgrading to MySQL 8.0 or 8.4, `SELECT` queries that use an `IN()` predicate with an extremely large set of values (for example, several thousand or more values in a single `IN()` list) might exhibit significantly higher query latency and CPU usage compared to the same workload on MySQL 5.7. The optimizer's handling of very large `IN()` lists is more expensive in 8.0 and 8.4, and the cost grows with the number of values in the list.
87+
88+
#### Resolution
89+
90+
- Reduce the number of values passed in the `IN()` list. Where possible, refactor the application to send a smaller, more selective set of values per query.
91+
- For workloads that need to filter against a large set of values, load the values into a temporary or staging table and use a `JOIN` against that table instead of a single large `IN()` list.
92+
- Batch the query into multiple smaller queries with shorter `IN()` lists and combine the results in the application layer.
93+
- Test the refactored queries on a read replica or restored copy of the server before applying changes to the primary.
94+
6995
## Related content
7096

7197
- [Major version upgrade in Azure Database for MySQL](how-to-upgrade.md)

articles/mysql/flexible-server/how-to-upgrade.md

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -171,13 +171,15 @@ To perform a major version upgrade of an Azure Database for MySQL Flexible Serve
171171
172172
1. Go to your primary server and perform a major version upgrade.
173173
174-
## Perform minimal downtime major version upgrade using read replicas
174+
## Recommended major version upgrade procedure across major versions using Read replica or Point-in-time restore (PITR)
175175
176-
To perform a major version upgrade of an Azure Database for MySQL Flexible Server with minimal downtime using read replica servers, perform the following steps.
176+
To perform a major version upgrade of an Azure Database for MySQL Flexible Server with minimal downtime using read replica servers or PITR, perform the following steps.
177+
178+
### Using a Read replica
177179
178180
1. Select your existing Azure Database for MySQL Flexible Server instance in the Azure portal.
179181
180-
1. Create a [read replica](how-to-read-replicas-portal.md) from your primary server.
182+
1. Create a [read replica](how-to-read-replicas-portal.md) from your existing primary server.
181183
182184
1. [Upgrade](#perform-a-planned-major-version-upgrade-using-the-azure-cli) your read replica to the target major version.
183185
@@ -196,11 +198,21 @@ To perform a major version upgrade of an Azure Database for MySQL Flexible Serve
196198
197199
1. Set Server Parameter read_only to **0** (OFF) to start writing on the promoted primary.
198200
199-
1. Point your application to the new primary (former replica) running the target version. Each server has a unique connection string. Update your application to point to the (former) replica instead of the source.
201+
1. Update your application to point to the new primary (former replica) running the target version. Each server has a unique connection string.
200202
201203
> [!NOTE]
202204
> This scenario only incurs downtime during steps 4 through 7.
203205
206+
### Using Point-in-time restore (PITR)
207+
208+
1. Perform PITR of your existing Azure Database for MySQL Flexible Server.
209+
210+
1. Upgrade the PITR instance to the target version.
211+
212+
1. Test and tune your production load/queries on the upgraded PITR instance until the result is satisfactory.
213+
214+
1. Update your application to point to the new primary (PITR instance) running the target version. Each server has a unique connection string.
215+
204216
## Related content
205217
206218
- [Frequently asked questions (FAQs)](how-to-upgrade-faq.md)

articles/mysql/flexible-server/release-notes/may-2026.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ This version doesn't include any engine version changes.
3535

3636
- TLS certificates are now automatically renewed earlier in their lifecycle (at 84% of validity) and all certificates follow the same renewal schedule, reducing the chance of connection issues caused by certificate expiry.
3737

38-
- During this scheduled maintenance window, a few servers migrate from the current architecture to a dedicated Standard Load Balancer (SLB) - based architecture. The candidate servers are communicated through the usual maintenance notifications. This enhancement adds a dedicated SLB to HA configurations for servers created with public access or private endpoints. By managing the MySQL data traffic path, the SLB eliminates the need for DNS changes during failovers, significantly reducing failover time. There's a brief extra downtime (of around 30 seconds) while this migration is performed. This feature isn't supported by servers using private access with a virtual network integration.
38+
- During this scheduled maintenance window, a few HA-enabled servers migrate from the current architecture to a dedicated Standard Load Balancer (SLB) - based architecture. The candidate servers are communicated through the usual maintenance notifications. This enhancement adds a dedicated SLB to HA configurations for servers created with public access or private endpoints. By managing the MySQL data traffic path, the SLB eliminates the need for DNS changes during failovers, significantly reducing failover time. There's a brief extra downtime (of around 30 seconds) while this migration is performed. This feature isn't supported by servers using private access with a virtual network integration.
3939

4040
## Known issues fixes
4141

0 commit comments

Comments
 (0)