Цитата (redreem @ 26.03.2014 - 15:12) |
причем тут IIS, если таймаут генерит SQL-сервер? |
Цитата (Strannik @ 27.03.2014 - 15:53) |
ок, а что тогда можно сделать по SQL Server, чтобы таймаут исчез/увеличился ? |
Цитата (killer8080 @ 27.03.2014 - 17:13) | ||
Strannik а почему дамп заливаете через PHP? У субд нет своих инструментов для этого?
как настроить тайиаут в MSSQL не подскажу, но что мешает пинговать соединение во время работы скрипта? Засекать время последнего запроса, и если превышает определенную величину, вызывать mssql_connect()? |
$connectionInfo = array("UID" => $GLOBALS["MsSqlUser"], "PWD" => $GLOBALS["MsSqlPassword"], "Database"=>$GLOBALS["MsSqlDatabase"], "CharacterSet" => "UTF-8");
$serverName = $GLOBALS["MsSqlHost"];
$conn = sqlsrv_connect( $serverName, $connectionInfo);
$sql="SELECT * FROM Table";
$params = array();
$options = array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
$res = sqlsrv_query($conn,$sql,$params,$options);
Цитата (Strannik @ 27.03.2014 - 17:42) |
зашибись обрабатывать данные по 200GB... |
Цитата (sergeiss @ 27.03.2014 - 21:25) | ||
В эти 200 ГБ что входит: данные + какая-нибудь разметка или просто данные? |
Цитата (Strannik @ 27.03.2014 - 17:47) | ||
вопрос - а зачем так извращаться? К примеру сервер с Windows7 + Sql SERVER 2008 обойдется в 3000 - 4000 руб(без лицензий) И все - траблом с таймаутом на новом сервер пусть занимается ТП сервера(при условии что со соей стороны ты все сделал). Зачем брать отдельно nix и ставить на него сайт ? |
Цитата (AllesKlar @ 28.03.2014 - 00:38) | ||||
При чем тут извращаться? Сервер базы данных - это сервер для ХРАНЕНИЯ и ОБРАБОТКИ данных. Веб сервер - это сервер, обеспечивающий работу скриптов, которые при необходимости, имеют доступ к серверам баз данных. Убейте своего архитектора и отрубите руки своиме админу. Оборудование и ПО нужно подбирать с учетом требуемых задач, а не "У нас IIS, потому что нам нужно работать с MSSQL". Такое заявлять тоже самое, что "завтра едем в суши бар, придется покупать Тоету" У меня на работе несколько MSSQL серверов на Server 2012 + несколько у клиентов (те, которые не захотели хранить свои базы у нас) Все же сайты хостятся у нас же на Debian + апач MSSQL была выбрана исключительно потому, что наши продукты имеют как веб-интерфейсы, так и десктопные приложения, писаные на C#. И плюс MySql реально уступает MsSql в вопросах хранимых процедур, функций и прочих тригеров. И обслуживает все это у нас всего 2 админа. Два ХОРОШИХ админа. Но я, как веб разработчик, уволюсь первым, если руководство захочет перевести наши сайты на IIS. Почему уволюсь - это уже во флейм. Гонять 200 Гб данных... это ж что там за запрос такой, который хапает за раз 200 ГБ данных? Может стоит посмотреть в сторону оптимизации скриптов? ![]() |
Цитата (AllesKlar @ 28.03.2014 - 00:38) |
Гонять 200 Гб данных... это ж что там за запрос такой, который хапает за раз 200 ГБ данных? Может стоит посмотреть в сторону оптимизации скриптов? |
Цитата (Strannik @ 28.03.2014 - 00:23) |
Цитата (sergeiss @ 27.03.2014 - 21:25) В эти 200 ГБ что входит: данные + какая-нибудь разметка или просто данные? это объем таблиц с данными базы данных |
Цитата (Strannik @ 27.03.2014 - 19:54) |
Можете подробнее рассказать? |
Цитата |
new_link If a second call is made to mssql_connect() with the same arguments, no new link will be established, but instead, the link identifier of the already opened link will be returned. This parameter modifies this behavior and makes mssql_connect() always open a new link, even if mssql_connect() was called before with the same parameters. |
function db_query($query) {
static $last_query_time;
$timeout = 30;
if($last_query_time && (time() - $last_query_time) > $timeout)
if(!mssql_connect('KALLESPC\SQLEXPRESS', 'sa', 'phpfi'))
return false;
$last_query_time = time();
return mssql_query($query);
}
Цитата (sergeiss @ 28.03.2014 - 10:36) | ||
Я когда этот вопрос задавал, имел ввиду "какой чистый объем данных". Потому что, как я понял, в эти 200ГБ входит всё: данные, индексы, всякие пустоты в файлах, содержащих таблицы.... И другой вопрос - это всё уникальные данные, которые входят в 200ГБ? Или там что-то дублируется из существовавшего ранее в БД? Эти все вопросы к тому, что пытаюсь до конца понять всё структуру, может какие еще полезные мысли будут. Сейчас задача твоя выглядит так: у клиента 3 раза в день появляется 200ГБ контента, который надо залить в БД, но БД не хочет принимать это всё. Говорит, "идите нафиг, таймаут". Поэтому и появляются мысли, что лучше задачу как-то изменить, чтобы найти рабочее решение. |
Цитата (killer8080 @ 28.03.2014 - 11:56) | ||||
я имел ввиду делать запросы через обертку. В mysql(i) расширениях для проверки связи есть ping. В mssql расширении в коннекте есть аргумент отвечающий за повторный вызов коннекта http://us1.php.net/manual/ru/function.mssql-connect.php
то есть можно сделать что то типа такого function db_query($query) { в sqlsrv_connect вроде такой фичи нет, наверно нужно другими способами определять состояние коннекта, например делать запрос пустышку, и перехватывать ошибки, если ошибка стартовать коннект. Вообще это всё костыли конечно, правильнее было бы разобраться с настройками сервера, и задать нужный таймаут на соединение в MSSQL сервере. |