Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Быстрое создание записей в БД / 25 сообщений из 57, страница 1 из 3
24.09.2009, 14:14
    #36214978
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое создание записей в БД
Сделал простой тест
Вставка в таблицу поля (a,b,c: integer) 1 000 000 записей

(все СУБД внутри виртуальной машины VirtualPC)

MS SQL 2005 544сек
ORACLE 10 100сек
CACHE 2009.1 через интерфейс Objects 70сек
CACHE 2009.1 через интерфейс SQL 45сек
CACHE 2009.1 через доступ к глобалям 7сек

У кого есть какие комментарии?
У меня вопрос - почему такое отставание MSSQL (Он при работе все время обращается к винту) ?
...
Рейтинг: 0 / 0
24.09.2009, 14:25
    #36215032
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое создание записей в БД
авторСделал простой тест
Вставка в таблицу поля (a,b,c: integer) 1 000 000 записей

Записи можно вставлять по разному... Покажите, хотябы, как Вы дедали это для MS SQL.
...
Рейтинг: 0 / 0
24.09.2009, 14:39
    #36215094
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое создание записей в БД
и снова здравствуйте, Рыцарь Печального Образа

P.S. Побег за попкорном
...
Рейтинг: 0 / 0
24.09.2009, 14:43
    #36215112
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое создание записей в БД
SiemarglСделал простой тест

У кого есть какие комментарии?

- Штурман, приборы!
- Семьдесят.
- Что "семьдесят"?
- А что "приборы"?

Для начала нужно чётко понимать, что же, собственно, Вы хотите мерять.

SiemarglУ меня вопрос - почему такое отставание MSSQL (Он при работе все время обращается к винту) ?
Стеклянный шар советует проверить autocommit :)

SiemarglУ кого есть какие комментарии?
Да, ещё один маленький комментарий.

Код: 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.
Connected to Oracle Database 10g Express Edition Release  10 . 2 . 0 . 1 . 0  
Connected as test

...

SQL> truncate table million;

Table truncated

Executed in  0 , 406  seconds

SQL> exec insert_million_1;

PL/SQL procedure successfully completed

Executed in  2 , 218  seconds

SQL> truncate table million;

Table truncated

Executed in  0 , 328  seconds

SQL> exec insert_million_2;

PL/SQL procedure successfully completed

Executed in  225 , 969  seconds

Any questions?
...
Рейтинг: 0 / 0
24.09.2009, 15:18
    #36215238
Senya_L
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое создание записей в БД
softwarerSiemarglУ меня вопрос - почему такое отставание MSSQL (Он при работе все время обращается к винту) ?
Стеклянный шар советует проверить autocommit :)Тоже про это подумалось. Про постоянное обращение к диску - он родимый. Сравниваем:
Код: plaintext
1.
   372406  мс - с autocommit
   109844  мс - с  1  явной  1  транзакцией
Ну и нельзя не проверить "наше все"
Код: plaintext
 5734  мс - BULK INSERT
Ну и до кучи:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
begin tran
go

set nocount on;

declare @i int

set @i =  0 
while @i <  1000000  begin
	insert into tbl(a, b, c) values(@i, @i, @i)
	set @i = @i +  1 
end
go

commit tran
go
Код: plaintext
 12296  мс
...
Рейтинг: 0 / 0
24.09.2009, 15:34
    #36215292
Senya_L
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое создание записей в БД
Надо еще и FB испытать. А то мужики не поймут...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
execute block
as
declare variable i int;
begin
  i =  0 ;
  while (i <  1000000 ) do begin
    insert into ttt(a, b, c) values(:i, :i, :i);
    i = i +  1 ;
  end
end
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 1000000  record(s) was(were) inserted into TTT

------ Performance info ------
Prepare time = 0ms
Execute time = 4s 688ms
Current memory =  34   376   820 
Max memory =  34   710   028 
Memory buffers =  2   048 
Reads from disk to cache =  23 
Writes from cache to disk =  1   561 
Fetches from cache =  3   095   744 
...
Рейтинг: 0 / 0
24.09.2009, 16:01
    #36215391
Dmitry Arefiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое создание записей в БД
Куда, что и кто еще вставлять будет ?
...
Рейтинг: 0 / 0
24.09.2009, 16:05
    #36215406
Senya_L
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое создание записей в БД
Dmitry ArefievКуда, что и кто еще вставлять будет ?Да ты только идею подай!..

Имхо, автору достаточно наглядно показали, что сравнивать сферический insert в вакууме - дело неблагодарное.
...
Рейтинг: 0 / 0
24.09.2009, 16:11
    #36215424
Dmitry Arefiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое создание записей в БД
Senya_Linsert
Да может там не insert, а alter table add column ("Вставка в таблицу поля"),
а в таблице 1M записей :)
...
Рейтинг: 0 / 0
24.09.2009, 16:44
    #36215509
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое создание записей в БД
> Автор: Senya_L
> Надо еще и FB испытать. А то мужики не поймут...

Семён, а если так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
execute block
as
declare variable i int;
begin
  i =  0 ;
  insert into ttt(a, b, c) values(:i, :i, :i);
  while (i <  31 ) do begin
    insert into ttt(a, b, c) select a, b, c from ttt;
    i = i +  1 ;
  end
end
?


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
24.09.2009, 16:48
    #36215517
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое создание записей в БД
Игорь Горбонос,

ой, да вариантов можно напридумывать:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
DECLARE 
  @StartTime datetime
SET @StartTime = GETDATE()

SELECT TOP  1000000  s1.object_id c1, s2.object_id c2, s3.object_id c3, s4.object_id c4 INTO T1
FROM sys.objects s1, sys.objects s2, sys.objects s3, sys.objects s4

SELECT DATEDIFF(ms, @StartTime, GETDATE()) AS ms
GO

Код: plaintext
1.
2.
3.
4.
(1000000 row(s) affected)

ms          
----------- 
1520

тока оно зачем?!
...
Рейтинг: 0 / 0
24.09.2009, 17:20
    #36215628
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое создание записей в БД
Да процедуру я не показал
Она в приципе почти копия как у Senya_L в свертке "до кучи", только значения присваиваются через random();

BULK INSERT мне не подходят (пока)

С отключением автокоммита ситуация значительно улучшилась.
MS SQL 2005 25сек
остальное неизменно
ORACLE 10 100сек
CACHE 2009.1 через интерфейс Objects 70сек
CACHE 2009.1 через интерфейс SQL 45сек
CACHE 2009.1 через доступ к глобалям 7сек



Порядок времени исполнения почти выровнялся. Возможно можно улучшить ORACLE? Вот процедура:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
declare              
     numrec number := 10000 ;             
     ii number := 0 ;             
     var1  number := 0 ;           
     var2  number := 0 ;           
     var3  number := 0 ;     
BEGIN     
    
     ii :=  0 ;     
     WHILE ii < numrec LOOP               
          var1 := ( 1000  + ii) mod  10000 ;                    
          var2 := ( 1002  + ii) mod  10000 ;                    
          var3 := ( 1010  + ii) mod  10000 ;                   
          INSERT INTO TestA (a,b,c) VALUES (var1,var2,var3);               
          ii := ii + 1 ;     
     END LOOP;     
     DBMS_OUTPUT.PUT_LINE( 'we ran succesfully! : ' || ii );     
END;
...
Рейтинг: 0 / 0
24.09.2009, 17:22
    #36215632
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое создание записей в БД
SiemarglВозможно можно улучшить ORACLE?Может, тоже коммитить попробовать?
...
Рейтинг: 0 / 0
24.09.2009, 17:24
    #36215638
locky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое создание записей в БД
SiemarglПорядок времени исполнения почти выровнялся. Возможно можно улучшить ORACLE? Вот процедура:

Код: plaintext
1.
2.
3.
declare              
     numrec number := 10000 ;             
END;

чо за фигня?
...
Рейтинг: 0 / 0
24.09.2009, 18:23
    #36215822
Yo.!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое создание записей в БД
Siemargl

Порядок времени исполнения почти выровнялся. Возможно можно улучшить ORACLE?
вот так нуна:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SQL> set timing on ;
SQL> insert /*+ append */ into TestA select mod(1000+rownum,1000), mod(1002+rownum,1000), mod(1010+rownum,1000) from (select null from dual connect by level <= 1000000) ;

1000000 rows created.

Elapsed: 00:00:02.39

...
Рейтинг: 0 / 0
24.09.2009, 19:21
    #36215917
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое создание записей в БД
Yo.!,
это трик, не совсем честный по логике.
Кроме того, рекурсия - дорогое удовольствие и у меня, например, по памяти не проходит.


ORA-04031: unable to allocate 44 bytes of shared memory ("large pool","unknown object","kxs-heap-w","cursor work heap")
...
Рейтинг: 0 / 0
24.09.2009, 19:35
    #36215930
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое создание записей в БД
Siemargl wrote:

> У кого есть какие комментарии?

Я думаю, тут дело в неверных замерах.
А в случае кэша -- возможно и непонимание
того, что он делает, и эквивалентность этого
тому, что делают другие СУБД (я например
не понимаю этого. Ты понимаешь ?)
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
24.09.2009, 19:38
    #36215935
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое создание записей в БД
Siemargl wrote:

> С отключением автокоммита ситуация значительно улучшилась.
> MS SQL 2005 25сек

Дело не в автокоммите, а в размере транзакции. Если 1 миллион
транзакций по одной записи -- будет медленно.
Если 10 тыщ транзакций по 100 записей -- будет быстрее.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
24.09.2009, 19:51
    #36215944
Yo.!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое создание записей в БД
SiemarglYo.!,
это трик, не совсем честный по логике.

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

Siemargl
Кроме того, рекурсия - дорогое удовольствие и у меня, например, по памяти не проходит.


дефолтной инсталяции oracle xe памяти хватает, нефиг лезть в настройки не обладая хотя бы минимальной квалификацией ...
...
Рейтинг: 0 / 0
24.09.2009, 20:18
    #36215978
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое создание записей в БД
Yo.!,
Инсталляция почти дефолтная, крутить ничего не надо было для тест-системы.
Изменена только ALTER SYSTEM SET SHARED_POOL_SIZE='100M' SCOPE=spfile;
по инструкции к apex v3

И не надо страдать манием величия (запроса) - единственным запросом выгребая тучу памяти.
А остальным что? Админ БД побьет, если поймает.

В реальности задача конечно не крутит циклы в PL/SQL, а внешней программой пишет по одной записи. У нее свои циклы (по приходу данных) и таких табличек - скажем, типично тысяча.
А это-искусственная ее имитация.


MasterZiv
Не понимаю. Самая прозрачная структура хранения кстати, у Кэша, который я впервые вижу, а вот остальные на что тратят время в тривиальном случае - мне непонятно.
Это как NTFS - (и структура хранения кстати, в СУБД похожа) - и надежная и иногда очень быстрая, но периодически тратит на свои внутренние дела ХЗ сколько времени. А кэш в этой аналогии как FAT.

А замеры то верные - в одной виртуалке, с дефолтными настройками.

С индексами структура еще усложнится, и не нужны они (пока и так не совем понятно что происходит).
...
Рейтинг: 0 / 0
24.09.2009, 20:23
    #36215985
Senya_L
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое создание записей в БД
MasterZiv
Siemargl wrote:

> С отключением автокоммита ситуация значительно улучшилась.
> MS SQL 2005 25сек

Дело не в автокоммите, а в размере транзакции. Если 1 миллион
транзакций по одной записи -- будет медленно.
Если 10 тыщ транзакций по 100 записей -- будет быстрее.
+1

XML'ем можно "лить" данные, уж на то пошло.

И что за мания сравнивать скорость вставки тупо создав программный цикл на сервере? Задача сервера БД - обслуживать клиентские запросы (простите уж за банальности, они для автора :)), а оценивать скорость вставки по запросам, как все мои выше указанные - это полная фигня. Я-то хоть проикалывался
...
Рейтинг: 0 / 0
24.09.2009, 20:30
    #36215992
Fox5631
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое создание записей в БД
Visual Foxpro 9

Код: plaintext
1.
2.
3.
4.
5.
6.
T1=SECONDS()
FOR i= 1  TO  1000000 
   INSERT INTO Ttt (a,b,c) VALUES (i,i,i)
NEXT

T2=SECONDS()
? T2-T1

2.703
...
Рейтинг: 0 / 0
24.09.2009, 20:33
    #36215998
Yo.!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое создание записей в БД
SiemarglYo.!,
Инсталляция почти дефолтная, крутить ничего не надо было для тест-системы.
Изменена только ALTER SYSTEM SET SHARED_POOL_SIZE='100M' SCOPE=spfile;
по инструкции к apex v3
брехня.
Код: 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.
SQL> alter system set sga_target=100m;

System altered.

SQL> shutdown immediate ;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup ;
ORACLE instance started.

Total System Global Area   134217728  bytes
Fixed Size                   1257620  bytes
Variable Size              117444460  bytes
Database Buffers            12582912  bytes
Redo Buffers                 2932736  bytes
Database mounted.
Database opened.
SQL> drop table testa ;

Table dropped.

SQL> create table TestA (var1 number( 5 ), var2 number( 5 ), var3 number( 5 )) ;

Table created.

SQL> insert /*+ append */ into TestA select mod( 1000 +rownum, 1000 ), mod( 1002 +rownum, 1000 ), mod( 1010 +rownum, 1000 ) from (select null from dual connect by level <=  1000000 ) ;

 1000000  rows created.

SiemarglИ не надо страдать манием величия (запроса) - единственным запросом выгребая тучу памяти.
память - она резиновая и дешевле картошки, а вот и/о - дорого, вот его беречь нуна.

SiemarglА остальным что? Админ БД побьет, если поймает.
гнать таких админов на пенсию, в крайнем случае, если где-то сохранилось, в зад на кашу...
...
Рейтинг: 0 / 0
24.09.2009, 20:46
    #36216018
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое создание записей в БД
авторС индексами структура еще усложнится, и не нужны они

Можно я буду Вас цитировать???
...
Рейтинг: 0 / 0
24.09.2009, 21:16
    #36216042
Dmitry Arefiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое создание записей в БД
Yo.!SiemarglИ не надо страдать манием величия (запроса) - единственным запросом выгребая тучу памяти.
память - она резиновая и дешевле картошки, а вот и/о - дорого, вот его беречь нуна.
В районе 5т-10т записей на батч (зависит от <длинный список 1>) перестает существенно
расти производительность. Заключать всю "нарезку" или только один батч в транзакцию
зависит больше <длинный список 2>. Первый и второй списки слабо пересекаются ...
Так что - кто как порежет. А кто и одной кучей.
...
Рейтинг: 0 / 0
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Быстрое создание записей в БД / 25 сообщений из 57, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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