Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Установка тайм-аута внутри скрипта 
:(
    Опции темы
s_a_s_h_a
Дата 28.12.2004, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 20.7.2004
Где: Петрозаводск

Репутация: нет
Всего: 1



Здравствуйте. Может быть кто-нибудь мне подскажет, как сделать следующую вещь.
Мне надо проверять работу БД. Для этого мне надо знать сколько записей в одной из таблиц. Это легко. Но как быть, если сделав запрос "select count(*) from NAME_TABLE", жду долго и не получаю никакого ответа, хотя там всего тыщ 40 записей. Меня интересует как, я могу установить внутри скрипта тайм-аут для этого запроса, чтобы если время, отведенное для него [запроса], будет превышено, получить соответствующее сообщение?

PM MAIL   Вверх
chaos
Дата 28.12.2004, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



по моему ни как!!!
И вообще это не красиво прекращать работу селекта
или придумай что нибудь другое(на за раз 4Е4 записей тягать)

Это сообщение отредактировал(а) chaos - 28.12.2004, 13:18
PM WWW   Вверх
Secandr
Дата 28.12.2004, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 1
Всего: 39



А может БД другую взять?


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
chur
Дата 28.12.2004, 20:35 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Надо использовать eval - alarm конструкцию. Из Perl Documentation:

Код

eval {
       local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
       alarm $timeout;
       $nread = sysread SOCKET, $buffer, $size;
       alarm 0;
   };
   if ($@) {
       die unless $@ eq "alarm\n";   # propagate unexpected errors
       # timed out
   }
   else {
       # didn't
   }

  Вверх
dimes
Дата 29.12.2004, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 249
Регистрация: 20.7.2004
Где: то около СПБ

Репутация: нет
Всего: 14



Цитата(s_a_s_h_a @ 28.12.2004, 13:09)
Для этого мне надо знать сколько записей в одной из таблиц.

Немного не в тему но, если ты хочеш знать сколько ВСЕГО строк в базе то нужно делать так:
http://dev.mysql.com/doc/mysql/ru/SHOW_TABLE_STATUS.html ( если у тебя не mySQL то почитай соответствующий мануал )

Это сообщение отредактировал(а) dimes - 30.12.2004, 11:34
PM ICQ   Вверх
s_a_s_h_a
Дата 30.12.2004, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 20.7.2004
Где: Петрозаводск

Репутация: нет
Всего: 1



Спасибо за пример, только я его понять не могу. smile
Меня, вообще, редко кто с первого раза понимает (знаю сам виноват), поэтому попытаюсь ещё раз объяснить ситуацию. У меня в одну из таблиц постоянно заносятся записи и мне надо каждые два часа проверять работоспособность БД, т.е. что в её таблицы нормально заносятся и беруться записи. Для этого я просто хочу узнавать количество записей, которые были вставлены в течение последних двух часов. Так вот, если одна из таблиц повредилась, то ведь запрос подвесит скрипт и мне надо это проследить и выйти по тайм-ауту, и выдать соответсвуещее сообщение. Мне понятно. smile Надеюсь, и вам стало понятнее. В принципе, я готов рассмотреть и другие варианты решения данной задачи.
PM MAIL   Вверх
dimes
Дата 30.12.2004, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 249
Регистрация: 20.7.2004
Где: то около СПБ

Репутация: нет
Всего: 14



SHOW TABLE STATUS [FROM db_name] [LIKE wild]

Команда SHOW TABLE STATUS (новшество версии 3.23) работает как SHOW STATUS, но предоставляет большое количество информации по каждой таблице.

Выводятся следующие столбцы(избранное):
........
Rows: Количество строк.
Update_time: Время последнего обновления файла данных.
Check_time: Время последней проверки таблицы.
/* А теперь особое внимание на это */
Comment Примечания, внесенные при создании таблицы (или информация о причинах, почему MySQL не может получить доступ к данным в таблицах).

Ссылку на документацию я уже запостил, смотри выше

PM ICQ   Вверх
chur
Дата 30.12.2004, 12:12 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Код

eval {
       local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
       alarm $timeout; #$timeout - время ожидания (в секундах)
       #здесь должен быть твой SQL запрос
       alarm 0;
   };
   if ($@) {
       die unless $@ eq "alarm\n";   # propagate unexpected errors
       # timed out
       # время вышло
   }
   else {
       # didn't
       # запрос прошел нормально
   }

  Вверх
dimes
Дата 30.12.2004, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 249
Регистрация: 20.7.2004
Где: то около СПБ

Репутация: нет
Всего: 14



Цитата(s_a_s_h_a @ 30.12.2004, 11:46)
Так вот, если одна из таблиц повредилась, то ведь запрос подвесит скрипт

Опа, видать СУБД не mySQL... для начала скажи какая у тебя СУБД так проще будет помочь.

PM ICQ   Вверх
s_a_s_h_a
Дата 30.12.2004, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 20.7.2004
Где: Петрозаводск

Репутация: нет
Всего: 1



Не, mySQL. Просто я в СУБД совсем никак. Может быть таблица и не повредилась, а слишком большой индексный файл и сама она большая и поэтому даже запрос select count(*) from TABLE подвешивает скрипт на несколько часов.
PM MAIL   Вверх
dimes
Дата 30.12.2004, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 249
Регистрация: 20.7.2004
Где: то около СПБ

Репутация: нет
Всего: 14



"SELECT COUNT(*) FROM tbl_name" Является одним из самых быстрых запросов
Цитата

Для таблиц HEAP и MyISAM функция COUNT(*), которая вызывается для одной таблицы и не содержит предложения WHERE, берется непосредственно из табличной информации...

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

Это сообщение отредактировал(а) dimes - 30.12.2004, 13:12
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0781 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.