The server fails to create a Windows I/O completion port during startup or thread scheduling, preventing MySQL from running.
MySQL Error 46 EE_FAILED_TO_CREATE_IO_COMPLETION_PORT means the Windows host ran out of kernel objects or lacks permission to open an I/O completion port. Free system handles, reboot, or adjust thread-handling settings to restore normal server startup and query processing.
Failed to create IO completion port (OS errno %d). EE_FAILED_TO_CREATE_IO_COMPLETION_PORT was added in 8.0.13.
The exact message is: Failed to create IO completion port (OS errno %d)
. MySQL maps this Windows failure to internal error 46, condition name EE_FAILED_TO_CREATE_IO_COMPLETION_PORT
. The error was introduced in MySQL 8.0.13.
MySQL uses a Windows I/O completion port (IOCP) to schedule background threads.
If the operating system refuses the request, the server aborts startup or halts new thread creation, making the instance unusable.
Windows may deny a new IOCP when the process or system has exhausted its limit of kernel handles. Antivirus software, poorly written drivers, or runaway applications can leak handles and starve MySQL.
Misconfigured service accounts can also trigger the problem.
The account running mysqld.exe
must have the SeIncreaseQuotaPrivilege
and SeIncreaseBasePriorityPrivilege
rights to allocate IOCP objects.
First, free kernel resources by closing unused applications and stopping services that leak handles. Reboot the server if handle usage cannot be reduced quickly.
If the issue persists, run MySQL under an administrative account or grant the required privileges through secpol.msc
.
Verify that antivirus software is not blocking IOCP creation.
High-load OLTP server: Heavy parallel load testing often leaks handles. Monitor Process Explorer > Handles
to catch leaks early.
Upgrading to MySQL 8.0.13+: Older configuration files may keep thread_handling=one-thread-per-connection
.
Switch to thread_handling=loaded-dynamically
or platform
to reduce IOCP usage.
Track Windows handle count with PerfMon - Process \ Handle Count
and alert when it approaches 20,000 per process or 65,000 systemwide.
Use Galaxy’s built-in query monitoring to catch connection spikes, letting you scale threads gracefully and avoid resource exhaustion.
EE_OUT_OF_RESOURCES
: Triggered by general handle leaks; mitigated with similar cleanup steps.
OS 87 Invalid Parameter
: Often appears when antivirus injects DLLs into mysqld.exe
; disable real-time scanning for the data directory.
.
Windows limits each process and the whole system to a finite number of kernel objects. Handle leaks in other applications can leave no free slots for MySQL to open a new I/O completion port.
The Windows account that starts MySQL needs the ability to increase quotas and priorities.
Locked-down service accounts lacking these rights will fail to create IOCPs.
Real-time scanners may block low-level calls or inject DLLs that change expected parameters, causing the CreateIoCompletionPort API to return an error.
Using thread_handling=one-thread-per-connection
on high-traffic servers multiplies IOCP demand and can trigger the error sooner.
.
Yes. IO completion ports are a Windows-specific API. Unix and Linux builds use epoll or kqueue and never raise error 46.
No direct option exists. You must free system handles or change thread handling to reduce IOCP demand.
Later versions may improve handle usage, but the root cause is at the OS level. Always pair an upgrade with handle monitoring.
Galaxy tracks active connections and thread pool status, helping teams detect surges before Windows handle limits are reached.