powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Почему в ASA 7.0.918 500тыс.зап. за 2часа, а в MSSQL2000 за 8 мин?
3 сообщений из 3, страница 1 из 1
Почему в ASA 7.0.918 500тыс.зап. за 2часа, а в MSSQL2000 за 8 мин?
    #32550871
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему в ASA 7.0.918 500тыс.зап. за 2часа, а в MSSQL2000 за 8 мин?
==================================================
Может и неправильные настройки сделал какие, но вроде всё было по умолчанию. Таблицы с 4 ключами на поля X,Y.

Код: 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.
procedure TForm1.btnQparamClick(Sender: TObject);
const
  COUNT_MAX     : Integer =  500000 ;
  GABARIT_MAX   : Integer =  1000000 ;
var
  i          : Integer;
  nTime      : LongInt;
begin
  Screen.Cursor := crHourGlass;
  try
    ProgressBar1.Max :=  COUNT_MAX;

    nTime := GetTickCount;

    DataModule2.ADOQuery1.SQL.Add('INSERT INTO tabl_name (numid, Xmin, Ymin, Xmax, Ymax) VALUES (:num, :X1, :Y1, :X2, :Y2)');
    Randomize;
    DataModule2.ADOConnection1.BeginTrans;
      for i :=  1  to COUNT_MAX do
      begin
        DataModule2.ADOQuery1.Parameters[ 0 ].Value := i;
        DataModule2.ADOQuery1.Parameters[ 1 ].Value := Random(GABARIT_MAX);
        DataModule2.ADOQuery1.Parameters[ 2 ].Value := Random(GABARIT_MAX);
        DataModule2.ADOQuery1.Parameters[ 3 ].Value := Random(GABARIT_MAX);
        DataModule2.ADOQuery1.Parameters[ 4 ].Value := Random(GABARIT_MAX);
        DataModule2.ADOQuery1.ExecSQL;
        ProgressBar1.Position := i;
      end;
    DataModule2.ADOConnection1.CommitTrans;
    MessageBox(Application.Handle,PChar('Âðåìÿ = '+IntToStr((GetTickCount-nTime) div  1000 )+' c.'), Pchar(ExtractFileName(Application.ExeName)), MB_ICONERROR);
  finally
    ProgressBar1.Position :=  0 ;
    Screen.Cursor := crDefault;
    DataModule2.ADOQuery1.Close;
  end;
end;
...
Рейтинг: 0 / 0
Почему в ASA 7.0.918 500тыс.зап. за 2часа, а в MSSQL2000 за 8 мин?
    #32551108
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПочему в ASA 7.0.918 500тыс.зап. за 2часа, а в MSSQL2000 за 8 мин?
Потому что во первых это старенькая семерочка. Во вторых в таком тесте это не скорость работы СУБД, а ADO и драйвера OLEDB или ODBC.

Я не поленился прогнать Ваш вариант теста на ASA9. Моя конфигурация:
P4 2400 (гипертерминэтинг - 2 проца, оба задействованы в СУБД), 1 гиг памяти, винт 7200 оборотов, XP SP1, база с размером страницы 2048,
ASA запущена с параметрами: "-m -cw -c 128M", т.е. используется статичный кэш в AWE размером 128 метров, лог на COMMIT очищается.
Результат выполнения теста: 392 сек.

Далее я не поленился сделать нормальный вгон данных:
Код: 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.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
procedure TForm1.Button2Click(Sender: TObject);
const
  COUNT_MAX     : Integer =  500000 ;
  GABARIT_MAX   : Integer =  1000000 ;
var
  i          : Integer;
  nTime      : LongInt;
  T          : TextFile;
begin
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('TRUNCATE TABLE tabl_name');
  ADOQuery1.ExecSQL;

  AssignFile(T, 'C:\TEMP.DAT');
  Rewrite(T);

  Screen.Cursor := crHourGlass;
  try
    ProgressBar1.Max :=  COUNT_MAX;

    nTime := GetTickCount;

    Randomize;

      for i :=  1  to COUNT_MAX do
      begin
        Writeln(T, IntToStr(i) + # 9  +
                IntToStr(Random(GABARIT_MAX)) + # 9  +
                IntToStr(Random(GABARIT_MAX)) + # 9  +
                IntToStr(Random(GABARIT_MAX)) + # 9  +
                IntToStr(Random(GABARIT_MAX)));

        ProgressBar1.Position := i;
      end;
    CloseFile(T);

    MessageBox(Application.Handle,PChar('A?aiy = '+
      IntToStr((GetTickCount-nTime) div  1000 )+' c.'), 
      Pchar(ExtractFileName(Application.ExeName)), MB_ICONERROR);

    nTime := GetTickCount;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add(
      'LOAD TABLE tabl_name FROM ''C:\TEMP.DAT'' FORMAT ASCII DELIMITED BY ''\t''');
    ADOQuery1.ExecSQL;

    MessageBox(Application.Handle,PChar('A?aiy = '+
      IntToStr((GetTickCount-nTime) div  1000 )+' c.'), 
      Pchar(ExtractFileName(Application.ExeName)), MB_ICONERROR);
  finally
    ProgressBar1.Position :=  0 ;
    Screen.Cursor := crDefault;
  end;
end;
Тут я фиксирую 2 времени выполнения - запись данных в текстовый файл и загрузка подготовленного файла оператором LOAD TABLE. В данном случае результат выполнения скрипта получается такой:
1. Сформирован файл размером 16 мб за 19 сек
2. Файл загружен в таблицу оператором LOAD TABLE за 6 сек

По моему комментарии излишни - поштучное добавление записей (особенно через ADO) это только для садомазохистов и тем, кому лень почитать BOL :)
...
Рейтинг: 0 / 0
Почему в ASA 7.0.918 500тыс.зап. за 2часа, а в MSSQL2000 за 8 мин?
    #32551268
L0cat0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Немного потестил
PIII-1.4S , 512Mb, 815EP, Hitachi(7200/8Mb)
ODBCExpress 5.0.7 (немного рихтованый по обработке ошибок) D7
-c160m -m -xtcpip (4k, 866RUS)

Hdbc1.StartTransact; // 1= c 8.0.2.4424
// 3= c 8.0.2.4424
// 4= c 7.0.4.3519
// 5= c 7.0.4.3519
for i := 1 to COUNT_MAX do
begin
// Hdbc1.StartTransact; // 2= c 8.0.2.4424
OEDataSet1.Params[0].Value := i;
OEDataSet1.Params[1].Value := Random(GABARIT_MAX);
OEDataSet1.Params[2].Value := Random(GABARIT_MAX);
OEDataSet1.Params[3].Value := Random(GABARIT_MAX);
OEDataSet1.Params[4].Value := Random(GABARIT_MAX);
OEDataSet1.ExecSQL;
ProgressBar1.Position := i;
// Hdbc1.EndTransact; // 2= 363 c 8.0.2.4424
end;
Hdbc1.EndTransact; // 1= 143 c 8.0.2.4424
// 3= 136 c 8.0.2.4424
// 4= 137 c 7.0.4.3519
// 5= 129 c 7.0.4.3519
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Почему в ASA 7.0.918 500тыс.зап. за 2часа, а в MSSQL2000 за 8 мин?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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