2011-01-24 2 views
2

Здравствуйте, я пытаюсь подключиться к базе данных с использованием Oracle 11g. Теперь один вопрос, который у меня на уме, есть, если у меня есть 1 сервер базы данных на сервере. Сколько одновременных запросов может обрабатывать мой сервер баз данных в данный момент, будет ли оно одним или будет несколько одновременно.Сколько открытых соединений может иметь сервер базы данных одновременно?

Чтобы сформулировать свой вопрос, если Client1 запрашивает запрос select из 100 лучших результатов, а Client2 запрашивает выбор чего-то еще, обрабатывает ли сервер оба в тот же момент или заканчивает первый запрос, который он получил и затем посещает следующий запрос?

+2

Операции в базе данных находятся в очереди - могут быть получены многочисленные запросы, но они в конечном итоге обрабатываются в порядке (которые могут быть изменены с использованием разных уровней изоляции). Это происходит так быстро, что кажется одновременным, но просмотр журналов демонстрирует, что команды выполняются последовательно. Уровень изоляции по умолчанию позволяет SELECT иметь приоритетный доступ к данным перед операциями DML (INSERT, UPDATE, DELETE). –

+1

Но запросы выполняются одновременно; если оба запроса будут получены одновременно, то они начнутся в несколько разное время, но вы не дожидаетесь завершения одного из них до следующего запуска. Теперь я не совсем уверен, что спрашивает ОП. –

ответ

6

Per Документов здесь: http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/listenercfg.htm

это относится к платформе. (Это также зависит от системы баз данных, но вы упомянули Oracle 11g, так это то, что я ответил конкретно.)

Примечание:

Число одновременных запросов на подключение по умолчанию работает конкретной системы. Значения по умолчанию для TCP/IP на операционной системе Linux и Microsoft Windows наблюдения:

◦Linux Операционная система: 128

◦Microsoft Windows XP Professional SP2 : 10

◦Microsoft Windows 2003 Сервер Enterprise Edition: 200

Для других баз данных вы всегда можете указать «Максимальные параллельные подключения» (здесь вводится тип БД) «

И на самом деле технически один процессор может обрабатывать только один расчет за раз, поэтому на самом деле, когда вы спрашиваете« В тот же момент »технически ответ нет.

Threading может заставить его ПОСМОТРЕТЬ, как будто они происходят в тот же момент, но, скорее всего, это не так. Threading, в сочетании с компьютерами, достаточно мощными, чтобы делать что-то очень остро, приводит к тому, что появляются, как будто они происходят в то же время, обрабатывая индивидуальные задачи, но на самом деле это не так. Но это более важная тема, чем можно здесь рассказать.

+0

Имейте в виду, что это значения по умолчанию, и они относятся к слушателю, а не к базе данных. Полностью можно полностью обойти слушателя. Что касается базы данных, параметр SESSIONS определяет, сколько одновременных пользователей могут войти в систему. – DCookie

1

СУБД может обрабатывать много соединений одновременно, обычно в сотнях. Однако обычно несколько запросов (может быть 2-3) на ядро ​​будут продолжаться в одно и то же время.

@ Давид, это правда, что один процессор может обрабатывать только один расчет за раз, но когда загрузка связана с диском, у него есть много свободного времени для обработки других запросов, ожидая загрузки данных ,

+0

Запросы DB редко связаны с дисками - все в памяти, и это запись в файл журнала, связанный с диском (таким образом, потенциальная проблема с производительностью). –

+1

Я должен не согласиться с этим утверждением. «Все» НЕ в памяти. – DCookie

+0

@DCookie: Большинство? –

0

Запросы будут выполняться одновременно, как правило. Количество подключений, которые могут быть обработаны, зависит от сервера, конфигурации слушателя и параметров инициализации процессов и сеансов. Если вы попытаетесь открыть слишком сильные соединения, вы получите сообщение об ошибке.

Если вы используете пул соединений, то каждое из этих объединенных соединений использует один из сеансов экземпляра базы данных и один из его процессов.(Кто-то может исправить меня по разнице между выделенными и совместно используемыми слушателями, но это примерно правильно). Каждый запрос (запрос) по объединенному соединению использует уже настроенное соединение, поэтому ему не нужен новый сокет TCP/IP и не имеет накладных расходов, связанных с созданием сокета/сеанса, что является одной из причин, по которым вы используйте объединение в первую очередь.

Независимо от того, используете ли вы объединенное или автономное соединение, процесс, выполняющий ваш запрос, не зависит от других и не ожидает завершения каких-либо других запросов. Если вы делаете обновления, это не обязательно так - вы можете подождать, пока другой процесс завершит собственное обновление, но если вы просто запрашиваете, это не является фактором.

Вы можете получить конкуренцию за ресурсы, поэтому два запроса, запущенные в одно и то же время, могут занять немного больше времени, чем любой из них требуется для самостоятельной работы, но они все еще работают одновременно.

1

Как утверждает @David, процессор может выполнять только одну вещь в данный момент.

Тем не менее, ваш вопрос непросто дать простой ответ. Сервер будет обрабатывать запросы в очереди в простейшем случае (игнорируя такие вещи, как ограничения ресурсов). Однако, как только первый запрос должен отказаться от управления из-за дискового ввода-вывода или любого другого запроса ресурса, второй запрос получает шанс. Это очень хорошо может завершиться до первого, в зависимости от того, что делает каждый запрос.

Смежные вопросы