Производительность Связанного сервера и опции

Проблема в том, что train_test_split находится не внутри sklearn.crossvalidate, а внутри sklearn.model_selection. Если вы хотите использовать train_test_split, вы должны использовать его как-

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

. Для получения более подробной информации просмотрите этот URL - https://scikit-learn.org/stable/modules/generated/sklearn. model_selection.train_test_split.html

9
задан marc_s 27 January 2017 в 13:12
поделиться

9 ответов

Я советовал бы динамическому openqueries в цикле курсора вместо связанных соединений. Это - единственный способ, которым я смог копировать связанную производительность соединения Доступа MS (по крайней мере, для единственных удаленных таблиц)

Регулярный связанный участвует в мс sql, слишком неэффективны путем получения по запросу всего особенно в огромных таблицах..

- Я хотел бы знать то, что так плохо о openqueries в циклах курсора? если сделано правильно, нет никаких проблем блокировки.

0
ответ дан 4 December 2019 в 12:22
поделиться

Избегайте соединяет с таблицами связанного сервера.

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

Пример:

SELECT loc.field1, lnk.field1
FROM MyTable loc
INNER JOIN RemoteServer.Database.Schema.SomeTable lnk
  ON loc.id = lnk.id
  AND lnk.RecordDate = GETDATE()
WHERE loc.SalesDate = GETDATE()

Этот запрос также применяет критерии в соединении, которое может использоваться связанным сервером, прежде чем соединение будет вычислено.

Рекомендуемый метод является использованием OPENQUERY.

Путем предотвращения соединения с использованием OPENQUERY локальный сервер только отправляет запрос, который будет выполняться, удаленно вместо этого отправляя ряд идентификаторов за соединением.

Используйте ссылку, чтобы получить ряд данных и выполнить вычисления локально. Любое использование временная таблица (для специальных запросов) или вставляет строку в постоянную таблицу в ночном задании.

Транзакции Begining могут перестать работать зависящий, если удаленный координатор транзакции установлен в любившем сервере. Используя его использует больше ресурсов.

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

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

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

И! Никогда не помещайте OPENQUERY (или никакой связанный сервер) в цикле!

8
ответ дан 4 December 2019 в 12:22
поделиться

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

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

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

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

3
ответ дан 4 December 2019 в 12:22
поделиться

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

2
ответ дан 4 December 2019 в 12:22
поделиться

Королевская боль

Мы раньше имели несколько связанных серверов в нашем магазине, и это оказалось таким ЛАВАШЕМ.

В первую очередь, были серьезные проблемы производительности, подобные тому, что Вы описываете. Я был потрясен, когда я видел статистику сети I/O. Несмотря на все усилия, нам не удалось подсказать SQL Server в разумное поведение.

Другая проблема состояла в том, что сохраненный procs имел эти, связанный сервер называет hardcoded везде без способа переопределить их. Таким образом, разработчики не могли легко протестировать на их песочницах разработки функциональность, которая коснулась связанных серверов. Это было главным препятствием для создания универсально применимого комплекта модульного теста.

В конце мы угробили связанные серверы полностью и переместили синхронизацию данных в веб-сервисы.

3
ответ дан 4 December 2019 в 12:22
поделиться

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

0
ответ дан 4 December 2019 в 12:22
поделиться

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

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

Отобразите План выполнения и Дисплей, которому Предполагаемый План выполнения имел тенденцию помогать, хотя я не понял многое из того, на что я смотрел.

Я не знаю, существует ли действительно эффективный способ сделать эти запросы с удаленным сервером, потому что кажется, что SQL Server не может использовать в своих интересах свою нормальную оптимизацию при хождении вразрез со Связанным сервером. Может быть такое чувство передаче всей таблицы, потому что на самом деле, именно это происходит.

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

Я не знаю ни о каких хороших статьях для указания на Вас к. Поскольку я пишу более сложные приложения SQL Server, я начал думать, что мне было нужно лучшее понимание того, как SQL Server работал внизу. С этой целью мы купили серию MS Press Inside Microsoft SQL Server 2005, отредактированную Kalen Delaney здесь на работе. Объем 1: Механизм устройства хранения данных является определенно местом для запуска, но я не получил это далеко в него. Так как мои последние несколько проектов не включили SQL Server, мое исследование его стало слабым.

1
ответ дан 4 December 2019 в 12:22
поделиться

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

Моя проблема решена ...

Я обновил sql server 2000 с sp2 до SP4, и если у вас уже есть sp4 на sql server 2000, запустите Instcat .sql. По своему опыту могу заверить, что это наверняка сработает, если вы устали от всех других обходных путей.

Спасибо, Миталеш mithalesh.gupta@gmail.com

0
ответ дан 4 December 2019 в 12:22
поделиться

Для решения вопроса о жестко заданном имени можно использовать динамический SQL и функцию. Например, я пытаюсь реализовать, в которой функция ufn_linkedDatabase (@purpose nvarchar (255)) с вводом 'cpi.cpi' (целевой CPI, вспомогательное значение по умолчанию) возвращает «[SERVER-NAME.DOMAIN.LCL, 2000]. [CPI]» в производственной среде (где мы используем альтернативный номер порта для SQL Server, я не знаю почему, в том числе в имени связанного сервера). Затем команда SQL собирается в @template varchar (max) с выражением @ {cpi.cpi}, представляющим связанный сервер и базу данных, а затем @workstring = REPLACE (@template, N'@{cpi.cpi} ', ...). Как функция фактически получает имя базы данных, не зависит от процедур - справочная таблица хороша.

Проблемы - выполнение OPENQUERY (), что, вероятно, еще лучше, по крайней мере, если для параметра связанного сервера «совместимость с сопоставлением» установлено значение «истина», чтобы большая часть задачи могла быть выполнена на связанном сервере - важно даже на быстрая сеть, а внутренняя сеть нашей серверной комнаты достаточно быстра - для выполнения OPENQUERY () мне, вероятно, потребуется обрабатывать 'cpi.cpi.server' и 'cpi.cpi.database' и 'cpi.cpi.server.database' отдельно. И, возможно, я напишу ровно одно приложение, использующее этот дизайн, и в этом случае он будет чрезмерно разработан. Тем не менее, это означает, что сама функция не должна быть какой-то сложной задачей.

0
ответ дан 4 December 2019 в 12:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: