Максимальное количество потоков windows

Какое максимальное количество потоков может иметь процесс в Windows?

В процессе Windows есть ли предел для потоков, которые будут использоваться одновременно. Если да, каково максимальное количество потоков, которое можно использовать для одного процесса?

Решение

Я не знаю предела, но есть два практических ограничения:

  1. Виртуальное пространство для стеков. Например, в 32-разрядной версии виртуальное пространство процесса составляет 4 ГБ, но для общего использования доступно только около 2 ГБ. По умолчанию каждый поток резервирует 1 МБ стекового пространства, поэтому верхним значением является 2000 потоков. Естественно, вы можете изменить размер стека и уменьшить его, чтобы в него помещалось больше потоков (параметр dwStackSize в CreateThread или вариант /STACK в команде компоновщика). Если вы используете 64-битную систему, этот предел практически исчезает.
  2. Планировщик накладных расходов. После того, как вы прочитаете тысячи потоков, их планирование будет занимать почти 100% вашего процессорного времени, поэтому они в любом случае в основном бесполезны. Это не жесткое ограничение, просто ваша программа будет работать медленнее и медленнее, чем больше потоков вы создадите.

Другие решения

Фактический предел определяется количеством доступной памяти различными способами. Нет ограничений на то, что «вы не можете иметь больше, чем столько» потоков или процессов в Windows, но есть ограничения на то, сколько памяти вы можете использовать в системе, и когда это закончится, вы не сможете создать больше потоки.

Настройка параметра конфигурации сервера max worker threads Configure the max worker threads Server Configuration Option

Применимо к: Applies to: SQL Server SQL Server (все поддерживаемые версии) SQL Server SQL Server (all supported versions) Применимо к: Applies to: SQL Server SQL Server (все поддерживаемые версии) SQL Server SQL Server (all supported versions)

В этом разделе описываются способы настройки параметра конфигурации сервера max worker threads в SQL Server SQL Server с помощью среды SQL Server Management Studio SQL Server Management Studio или Transact-SQL Transact-SQL . This topic describes how to configure the max worker threads server configuration option in SQL Server SQL Server by using SQL Server Management Studio SQL Server Management Studio or Transact-SQL Transact-SQL . Параметр max worker threads задает количество рабочих потоков, доступных SQL Server SQL Server для обработки запросов входа, выхода и аналогичных запросов приложений. The max worker threads option configures the number of worker threads that are available SQL Server SQL Server -wide to process query requests, login, logout, and similar application requests.

SQL Server SQL Server использует собственные службы потоков операционных систем, чтобы обеспечить соблюдение следующих условий. uses the native thread services of the operating systems to ensure the following conditions:

Один или несколько потоков одновременно поддерживают все сети, поддерживаемые SQL Server SQL Server . One or more threads simultaneously support each network that SQL Server SQL Server supports.

Один поток обрабатывает контрольные точки базы данных. One thread handles database checkpoints.

Пул потоков обрабатывает запросы от всех пользователей. A pool of threads handles all users.

Значение по умолчанию для параметра max worker threads — 0. The default value for max worker threads is 0. Это позволяет SQL Server SQL Server автоматически настраивать количество рабочих потоков при запуске. This enables SQL Server SQL Server to automatically configure the number of worker threads at startup. Настройка по умолчанию является оптимальной для большинства систем. The default setting is best for most systems. Но иногда, в зависимости от конфигурации системы, установка параметра max worker threads в другое определенное значение может улучшить производительность. However, depending on your system configuration, setting max worker threads to a specific value sometimes improves performance.

Читайте также:  Snmpwalk linux ������� �������������

Перед началом Before You Begin

Ограничения Limitations and Restrictions

Если реальное количество потоков превышает число, заданное параметром max worker threads, то SQL Server SQL Server использует пул рабочих потоков, так что следующий доступный рабочий поток сможет обработать запрос. The actual number of query requests can exceed the value set in max worker threads in which case SQL Server SQL Server pools the worker threads so that the next available worker thread can handle the request. Рабочий поток назначается только активным запросам и освобождается после обслуживания запроса. A worker thread is assigned only to active requests and is released once the request is serviced. Это происходит в случае, даже если сеанс пользователя или подключение, в которых был создан запрос, остаются открытыми. This happens even if the user session/connection on which the request was made remains open.

Параметр конфигурации сервера max worker threads не ограничивает все потоки, которые могут быть порождены в ядре. The max worker threads server configuration option does not limit all threads that may be spawned inside the engine. Системные потоки, требуемые для LazyWriter, контрольной точки, модуля записи журнала, Service Broker, диспетчера блокировок или других задач, порождаются независимо от этого ограничения. System threads required for tasks such as LazyWriter, Checkpoint, Log Writer, Service Broker, Lock Manager, or others are spawned outside this limit. Группы доступности используют некоторые рабочие потоки в рамках ограничения max worker thread limit, но также используют системные потоки (см. раздел Использование потока группами доступности). Если число настроенных потоков превышается, то следующий запрос будет содержать сведения о системных задачах, породивших дополнительные потоки. Availability Groups use some of the worker threads from within the max worker thread limit but also use system threads (see Thread Usage by Availability Groups ) If the number of threads configured is being exceeded, the following query will provide information about the system tasks that have spawned the additional threads.

Рекомендации Recommendations

Это расширенный параметр, и изменять его следует только опытным администраторам баз данных или сертифицированным по SQL Server SQL Server специалистам. This option is an advanced option and should be changed only by an experienced database administrator or certified SQL Server SQL Server professional. Если вы считаете, что есть проблема с производительностью, вероятно, причина не в доступности рабочих потоков. If you suspect that there is a performance problem, it is probably not the availability of worker threads. Скорее всего, причина связана с действиями, которые занимают рабочие потоки и не освобождают их. The cause is more likely related to activies that occupy the worker threads and do not release them. В число примеров входят длительные запросы или узкие места в системе (операции ввода-вывода, блокировка, ожидания кратковременной блокировки, ожидания сетевых операций). Examples include long-running queries or bottlenecks on the system (I/O, blocking, latch waits, network waits) that cause long-waiting queries. Рекомендуется найти причину проблемы производительности, прежде чем изменять параметр max worker threads. It is best to find the root cause of a performance issue before you change the max worker threads setting. Дополнительные сведения об оценке производительности см. в статье Наблюдение и настройка производительности. For more information on assessing performance, see Monitor and tune for performance.

Пул потоков помогает оптимизировать производительность при подключении к серверу большого числа клиентов. Thread pooling helps optimize performance when a large number of clients connect to the server. Обычно для каждого запроса в операционной системе создается отдельный поток. Usually, a separate operating system thread is created for each query request. Однако в случае сотен соединений с сервером, использование одного потока на каждый запрос приводит к потреблению большого числа системных ресурсов. However, with hundreds of connections to the server, using one thread per query request can consume large amounts of system resources. Параметр max worker threads позволяет SQL Server SQL Server создавать пул рабочих потоков, чтобы обслужить большое число запросов, что улучшает производительность. The max worker threads option enables SQL Server SQL Server to create a pool of worker threads to service a larger number of query requests, which improves performance.

В следующей таблице показано автоматически настроенное число рабочих потоков (если задано значение, равное 0) для различных сочетаний ЦП, архитектуры компьютера и версий SQL Server SQL Server с использованием формулы: Максимальное число рабочих потоков по умолчанию + (( логические ЦП – 4) * *рабочие потоки на ЦП*)**. The following table shows the automatically configured number of max worker threads (when value is set to 0) based on various combinations of CPUs, computer architecture, and versions of SQL Server SQL Server , using the formula: Default Max Workers + (( logical CPUs — 4) * Workers per CPU)**.

Читайте также:  Обратный скроллинг windows 10
Число процессоров Number of CPUs 32-разрядный компьютер (до SQL Server 2014 (12.x) SQL Server 2014 (12.x) ) 32-bit computer (up to SQL Server 2014 (12.x) SQL Server 2014 (12.x) ) 64-разрядный компьютер (до SQL Server 2016 (13.x); SQL Server 2016 (13.x) SP1) 64-bit computer (up to SQL Server 2016 (13.x); SQL Server 2016 (13.x) SP1) 64-разрядный компьютер (начиная с версии SQL Server 2016 (13.x); SQL Server 2016 (13.x) SP2 и SQL Server 2017 (14.x); SQL Server 2017 (14.x) ) 64-bit computer (starting with SQL Server 2016 (13.x); SQL Server 2016 (13.x) SP2 and SQL Server 2017 (14.x); SQL Server 2017 (14.x) )
256 256 512 512 512 512
8 8 288 288 576 576 576 576
16 16 352 352 704 704 704 704
32 32 480 480 960 960 960 960
64 64 736 736 1472 1472 1472 1472
128 128 1248 1248 2496 2496 4480 4480
256 256 2272 2272 4544 4544 8576 8576

До SQL Server 2016 (13.x); SQL Server 2016 (13.x) SP1 Число рабочих потоков на ЦП зависит только от архитектуры (32- или 64-разрядная): Up to SQL Server 2016 (13.x); SQL Server 2016 (13.x) SP1, the Workers per CPU only depend on the architecture (32-bit or 64-bit):

Число процессоров Number of CPUs 32-разрядный компьютер 1 32-bit computer 1 64-разрядный компьютер 64-bit computer
256 256 512 512
> 4 > 4 256 + ((число логических ЦП – 4) * 8) 256 + ((logical CPU’s — 4) * 8) 512 2 + ((число логических ЦП – 4) * 16) 512 2 + ((logical CPU’s — 4) * 16)

Начиная с SQL Server 2016 (13.x); SQL Server 2016 (13.x) SP2 и SQL Server 2017 (14.x); SQL Server 2017 (14.x) , Число рабочих потоков на ЦП зависит от архитектуры и количества процессоров (от 4 до 64 или больше 64): Starting with SQL Server 2016 (13.x); SQL Server 2016 (13.x) SP2 and SQL Server 2017 (14.x); SQL Server 2017 (14.x) , the Workers per CPU depend on the architecture and number of processors (between 4 and 64, or greater than 64):

Число процессоров Number of CPUs 32-разрядный компьютер 1 32-bit computer 1 64-разрядный компьютер 64-bit computer
256 256 512 512
> 4 и > 4 and 256 + ((число логических ЦП – 4) * 8) 256 + ((logical CPU’s — 4) * 8) 512 2 + ((число логических ЦП – 4) * 16) 512 2 + ((logical CPU’s — 4) * 16)
> 64 > 64 256 + ((число логических ЦП – 4) * 32) 256 + ((logical CPU’s — 4) * 32) 512 2 + ((число логических ЦП – 4) * 32) 512 2 + ((logical CPU’s — 4) * 32)

1 Начиная с SQL Server 2016 (13.x); SQL Server 2016 (13.x) , SQL Server SQL Server больше нельзя устанавливать в 32-разрядной операционной системе. 1 Starting with SQL Server 2016 (13.x); SQL Server 2016 (13.x) , SQL Server SQL Server can no longer be installed on a 32-bit operating system. Значения для 32-разрядного компьютера приведены, чтобы помочь клиентам, работающим с SQL Server 2014 (12.x) SQL Server 2014 (12.x) и более ранних версий. 32-bit computer values are listed for the assistance of customers running SQL Server 2014 (12.x) SQL Server 2014 (12.x) and earlier. Для экземпляра SQL Server SQL Server , работающего на 32-разрядном компьютере, рекомендуется ограничить число рабочих потоков до 1024. We recommend 1,024 as the maximum number of worker threads for an instance of SQL Server SQL Server that is running on a 32-bit computer.

2 Начиная с SQL Server 2017 (14.x); SQL Server 2017 (14.x) , Максимальное число рабочих потоков по умолчанию делится на 2 для компьютеров с объемом памяти менее 2 ГБ. 2 Starting with SQL Server 2017 (14.x); SQL Server 2017 (14.x) , the Default Max Workers value is divided by 2 for machines with less than 2GB of memory.

Рекомендации по использованию процессоров в количестве, превышающем 64, см. в разделе Рекомендации по использованию SQL Server на компьютерах, которые имеют более 64 процессоров. For recommendations on using more than 64 CPUs, refer to Best Practices for Running SQL Server on Computers That Have More Than 64 CPUs.

Если все рабочие потоки заняты выполнением длительных запросов, SQL Server SQL Server может не отвечать на другие запросы, пока один из потоков не завершит работу и не станет доступным. When all worker threads are active with long running queries, SQL Server SQL Server might appear unresponsive until a worker thread completes and becomes available. Хотя это и не ошибка, такое поведение иногда нежелательно. Although this is not a defect, it can sometimes be undesirable. Если процесс не отвечает и новые запросы не могут быть обработаны, подключитесь к SQL Server SQL Server через выделенное административное соединение (DAC) и уничтожьте процесс. If a process appears to be unresponsive and no new queries can be processed, then connect to SQL Server SQL Server using the dedicated administrator connection (DAC), and kill the process. Во избежание этого увеличьте максимальное число потоков управления. To prevent this, increase the number of max worker threads.

безопасность Security

Permissions Permissions

Разрешения на выполнение хранимой процедуры sp_configure без параметров или только с первым параметром по умолчанию предоставляются всем пользователям. Execute permissions on sp_configure with no parameters or with only the first parameter are granted to all users by default. Для выполнения процедуры sp_configure с обоими параметрами для изменения параметра конфигурации или запуска инструкции RECONFIGURE необходимо иметь разрешение ALTER SETTINGS на уровне сервера. To execute sp_configure with both parameters to change a configuration option or to run the RECONFIGURE statement, a user must be granted the ALTER SETTINGS server-level permission. Разрешение ALTER SETTINGS неявным образом предоставлено предопределенным ролям сервера sysadmin и serveradmin. The ALTER SETTINGS permission is implicitly held by the sysadmin and serveradmin fixed server roles.

Использование SQL Server Management Studio SQL Server Management Studio Using SQL Server Management Studio SQL Server Management Studio

Настройка параметра max worker threads To configure the max worker threads option

В обозревателе объектов щелкните правой кнопкой мыши сервер и выберите пункт Свойства. In Object Explorer, right-click a server and select Properties.

Щелкните узел Процессоры . Click the Processors node.

В поле Максимальное число рабочих потоков введите или выберите значение от 128 до 32 767. In the Max worker threads box, type or select a value from 128 through 32,767.

Используйте параметр max worker threads для установки количества рабочих потоков, доступных процессам SQL Server SQL Server . Use the max worker threads option to configure the number of worker threads available to SQL Server SQL Server processes. Значение по умолчанию параметра max worker threads является оптимальным для большинства систем. The default setting for max worker threads is best for most systems. Но в зависимости от конфигурации системы установка параметра max worker threads в меньшее значение может улучшить производительность. However, depending on your system configuration, setting max worker threads to a smaller value sometimes improves performance. Дополнительные сведения см. в разделе Рекомендации на этой странице. See Recommendations in this page for more information.

Использование Transact-SQL Using Transact-SQL

Настройка параметра max worker threads To configure the max worker threads option

Установите соединение с компонентом Компонент Database Engine Database Engine . Connect to the Компонент Database Engine Database Engine .

На панели «Стандартная» нажмите Создать запрос. From the Standard bar, click New Query.

Скопируйте следующий пример в окно запроса и нажмите кнопку Выполнить. Copy and paste the following example into the query window and click Execute. В этом примере описывается использование процедуры sp_configure для задания значения параметра max worker threads равным 900 . This example shows how to use sp_configure to configure the max worker threads option to 900 .

Дальнейшие действия. После настройки параметра «Максимальное количество рабочих потоков» Follow Up: After you configure the max worker threads option

Изменения вступят в силу сразу после выполнения RECONFIGURE без необходимости перезапуска Компонент Database Engine Database Engine . The change will take effect immediately after executing RECONFIGURE, without requiring the Компонент Database Engine Database Engine to restart.

Читайте также:  Как установить psycopg2 windows
Оцените статью