Проблема, которую вы описали, разрешима путем установки очереди FIFO между COM-портами и потоками MySQL. Существует некоторый поток данных (назовите его в восходящем направлении) от COM-устройств, поместите эти данные в Поточно-безопасный FIFO (Delphi имеет одну реализацию: System.Generics.Collections.TThreadedQueue) и выделите N потоков для MySQL, которые будут считывать часть данных из очереди FIFO (назовите это вниз по течению). Таким образом, вы преобразуете свою задачу в классическую задачу производителя / потребителя. Если потоки MySQL слишком медленные, размер FIFO будет увеличиваться, в этом случае вам придется увеличить количество потоков MySQL. Вы можете определить оптимальное количество потоков MySQL, просмотрев средний размер FIFO.
Проблема перегрузки буфера драйвера возникает в том случае, когда физическое устройство записывает данные быстрее, чем ваша программа может их обработать. В вашем случае это происходит из-за медленной части потока MySQL.
По правде говоря, скорость COM-порта очень медленная по сравнению с процессором и потоками, я уверен, что суть вашей проблемы - вы считываете с COM-устройств большое количество кусочков данных небольшого размера и переносите каждый маленький кусочек данных в операцию SQL в фоновом режиме вашей библиотеки MySQL. Перенесите свой взгляд на BATCHING - объедините большое количество данных малого размера с более большими пакетами данных, чтобы вы могли уменьшить количество операций SQL по TCP / IP