powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вопросы от нубов, или список для коллекции "Советы бывалых"
14 сообщений из 39, страница 2 из 2
Вопросы от нубов, или список для коллекции "Советы бывалых"
    #38586731
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обсуждение оргвопросов я зачистил.
...
Рейтинг: 0 / 0
Вопросы от нубов, или список для коллекции "Советы бывалых"
    #38586752
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид> (думаешь, я просто так несколько раз вопил
Таблоид> о мнемонических константах приложения ?.. :-))

Что-то смутно припоминаю, но мненоники тут никак
не помогут, по сути, как и контекстные переменные и пр.
Помогут пакеты и константы/переменные, когда появятся.

Мне в своё время значительно помогло сохранение
запросов в IBE - накидаешь десяток-другой наиболее
часто встречающихся запросов и дальше как-то проще.
Щас вообще древовидные группы запросов появились, но
у меня никак руки не дойдут полностью на них перейти...

Впрочем, это несколько оффтоп, так что закругляемся.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопросы от нубов, или список для коллекции "Советы бывалых"
    #38586753
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky> Обсуждение оргвопросов я зачистил.

Ну и абсолютно зря.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопросы от нубов, или список для коллекции "Советы бывалых"
    #38594673
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Продолжаем разговор... :-)

* неявное приведение типов и связанные с этим неприятности (например, не использование индекса при поиске с условием where some_varchar_field = :some_numeric_literal) - по мотивам одной из многочисленных бесед
...
Рейтинг: 0 / 0
Вопросы от нубов, или список для коллекции "Советы бывалых"
    #38594685
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Воооот!...

Я нашёл, кто будет эту самую таблицу лабать. :)
У тебя свободного времени много, так что не
поленись, составь по исходникам таблицу
приведения типов, с приоритетами.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопросы от нубов, или список для коллекции "Советы бывалых"
    #38594693
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамУ тебя свободного времени много, так что не поленись, составь по исходникам таблицу приведения типов, с приоритетами.Гм... Найти бы еще это место в исходниках...
зы. а своб. времени у меня - как у всех, кстати :)
...
Рейтинг: 0 / 0
Вопросы от нубов, или список для коллекции "Советы бывалых"
    #38594701
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид> Гм... Найти бы еще это место в исходниках...

Я функцию не помню, но по названию можно будет
догадаться, наверное. Файл - или opt.cpp или btr.cpp
вроде бы, если шо ДЕ поправит.

> зы. а своб. времени у меня - как у всех, кстати :)

Ага, ага, заметно. :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопросы от нубов, или список для коллекции "Советы бывалых"
    #38594706
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамАга, ага, заметно. :)Тсс!.. я выполняю важное партийное задание, делаю OLTP-тест! а ты тут палишь на весь свет! :-)
...
Рейтинг: 0 / 0
Вопросы от нубов, или список для коллекции "Советы бывалых"
    #38594815
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так. Пока не забыл то, на что сам лбом недавно налетел.

* предостережение по использованию rand() /отсутствие материализации её результата и перевычисление на каждой обрабатываемой записи/
А именно - выбор случайной записи (в предположении, что есть и возрастающий, и убывающий индексы по ID).
var-1.
Код: sql
1.
2.
3.
select id from doc_list
where id >= (select min(id)-0.5 from doc_list) + rand()*( (select max(id)+0.5 from doc_list) - (select min(id)-0.5 from doc_list))
order by id;

- выдаст перекос (максимальные ID'шники будут выбираться крайне редко)

var-2.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
execute block returns(id int) as
  declare id_rnd int;
begin
  id_rnd = (select min(id)-0.5 from doc_list) 
             + rand() * 
             ( (select max(id)+0.5 from doc_list) - (select min(id)-0.5 from doc_list) );

  select h.id from doc_list h where h.id >= :id_rnd order by id into id;
  suspend;
end

- выдаст равномерное распределение.

PS. Способ на чистом SQL, с материализацией rand'a, - вроде бы есть:
Код: sql
1.
2.
3.
4.
5.
    select id from doc_list
    where id >= (select min(id)-0.5 from doc_list) 
                    + (select distinct rand() r from rdb$database) * 
                       ( (select max(id)+0.5 from doc_list) - (select min(id)-0.5 from doc_list))
    rows 1;

- но почему-то выдаёт самый первый ID'шник гораздо реже, чем все остальные.
Вот результат для таблицы с 10 строками (id=2...11), цикл 10 тыс итераций:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
execute block returns(id int, cnt int, cnt_avg double precision, deviation_percent double precision) as
declare r double precision;
declare variable id_rnd int;
declare variable n int = 10000;
begin
  delete from t;
  while (n>0) do begin
    insert into t -- log: t(id int);
    select id from doc_list
    where id >= (select min(id)-0.5 from doc_list) 
      + (select distinct rand() r from rdb$database) 
      * ( (select max(id)+0.5 from doc_list) - (select min(id)-0.5 from doc_list))
    rows 1;
    n=n-1;
  end

  for select id,count(*), avg(count(*))over(), 100.00 * (count(*)-avg(count(*))over()) / avg(count(*))over()
  from t group by id
  into id, cnt, cnt_avg, deviation_percent
  do suspend;
end


IDCNTCNT_AVGDEVIATION_PERCENT2518950-45,47310429509,68410179507,0559839503,47610089506,179609501,0589659501,5799979504,941010179507,05119939504,52
...
Рейтинг: 0 / 0
Вопросы от нубов, или список для коллекции "Советы бывалых"
    #38594841
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS. нарыл в итоге, что надо подправить, дабы на pure-sql было равномерное распределение: к лимитным значениям надо единицу добавлять/отнимать, а не 0.5
ХЗ почему так, но - работает. Но грузит бедную rdb$database по самое не балуй :-)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
recreate table doc_list(id int);
insert into doc_list values(0);
insert into doc_list values(1);
insert into doc_list values(2);
insert into doc_list values(3);
insert into doc_list values(4);
insert into doc_list values(5);
insert into doc_list values(6);
insert into doc_list values(7);
insert into doc_list values(8);
insert into doc_list values(9);

recreate table t(id int);
commit;
set term ^;
execute block returns(id int, cnt int, cnt_avg double precision, deviation_percent double precision) as
declare r double precision;
declare variable id_rnd int;
declare variable n int = 100000;
begin
  delete from t;
  while (n>0) do begin
    insert into t
     select id from doc_list
    where id >= (select min(id)-1 from doc_list) 
                + (select distinct rand() r from rdb$database) 
                * ( (select max(id)+1 from doc_list) - (select min(id)-1 from doc_list))
    rows 1; 
    n=n-1;
  end

  for select id,count(*), avg(count(*))over(), 100.00 * (count(*)-avg(count(*))over()) / avg(count(*))over()
  from t group by id
  into id, cnt, cnt_avg, deviation_percent
  do suspend;
end^
set term ;^
commit;
...
Рейтинг: 0 / 0
Вопросы от нубов, или список для коллекции "Советы бывалых"
    #38595005
mvb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидПродолжаем разговор... :-)

* неявное приведение типов и связанные с этим неприятности (например, не использование индекса при поиске с условием where some_varchar_field = :some_numeric_literal) - по мотивам одной из многочисленных бесед

тут есть еще один "образчик" получения разных результатов при неявном приведении типов. ))
...
Рейтинг: 0 / 0
Вопросы от нубов, или список для коллекции "Советы бывалых"
    #38595015
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mvbеще один "образчик" получения разных результатов при неявном приведении типов. ))а, так ты рецидивист со стажем, оказывается ? :-)
...
Рейтинг: 0 / 0
Вопросы от нубов, или список для коллекции "Советы бывалых"
    #38595057
mvb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидmvbеще один "образчик" получения разных результатов при неявном приведении типов. ))а, так ты рецидивист со стажем, оказывается ? :-)

Да, жизнь ничему не учит, оказывается ))
...
Рейтинг: 0 / 0
Вопросы от нубов, или список для коллекции "Советы бывалых"
    #38607636
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Святое забыл: этюды на тему user-трейса.
* запускаю согласно доке , а ничего нет кроме стартового сообщения "Trace session ID 1 started" (на самом деле или не указан порт <> 3050; или неправильно указан шаблон в конфиге трейса для базы/алиаса);
* как видеть вывод трейса и на экране, и при этом чтобы он в лог шёл (т.е. просто сказать про mtee / supertee)
* как мне найти самые-пресамые тормозные запросы, а среди них - "наиболее пресамый" (grep + сортировка по убыванию значения времени; это вообще-то не к ФБ, но всё равно "рядом сидит")
* трейс внезапно остановился с сообщением "Session NN is suspended as its log is full" (по мотивам своих же шишек)
...
Рейтинг: 0 / 0
14 сообщений из 39, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вопросы от нубов, или список для коллекции "Советы бывалых"
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]