powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / ANN: видео о мифе эффективности параллельной вставки
91 сообщений из 91, показаны все 4 страниц
ANN: видео о мифе эффективности параллельной вставки
    #39420012
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделал видео.
В этом видео - тест параллельной вставки данных в одну таблицу. Теория и практика развеивают мифы. Сравнение серверов Firebird 2.5, 3.0, Classic, SuperClassic, SuperServer.

Тут если вставить ссылку на ютуб, она вроде ембеддится, ну и ладно. Вопросы?
YouTube Video
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39420023
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Kdv!
You wrote on 15 марта 2017 г. 14:54:12:

KdvВопросы?Primary Key и вообще индексы есть?
(ютуб зарезан)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39420042
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

только ПК. таблица с целочисленными типами, запись 70-80 байт.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39420045
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там на 15 минуте ошибка в тексте, AFAIU -
должно быть "отрыв от SC и CS".

Описание/код вставлятора есть где-то?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39420046
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Впрочем, досмотрел до конца,
тогда код не нужен, пожалуй. :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39420052
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Kdv!
You wrote on 15 марта 2017 г. 15:15:17:

Kdv> только ПКну дык! сериализация ж никуда не делась.
проверь без него.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39420053
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамОписание/код вставлятора есть где-то?
сгенерированы скрипты для вставки, потом "запускатор" стартует партию ISQL с этими скриптами.
Гаджимурадов РустамТам на 15 минуте ошибка в тексте, AFAIU -
должно быть "отрыв от SC и CS".
черт, да, конечно.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39420078
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийну дык! сериализация ж никуда не делась.
проверь без него.
без него будет то же самое, только побыстрее. Собственно, Ковязин еще в 2015 году делал отдельный тест влияния "коротких" и "больших" ПК на вставку, и на миллионе записей и целочисленным ПК разница где-то в 2.5 раза, причем деградации нет.
А вот на строковом индексе - деградация идет почти сразу, уже с десятков тысяч записей.

Тест, конечно, надо перепроводить на 3.0.2, и у меня была мысль проверить совсем без индексов. Но пока повтор теста на втором месте по важности.

Кроме того, hvlad сказал, что в отличие от всего остального SuperServer 3.0 будет пытаться искать другую свободную страницу, если наткнется на лок. Но я это обдумывал, и пришел к выводу, что нифига это не даст, кроме вероятной "фрагментированности" страниц (которую тоже надо будет проверить при повторении теста).
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39420093
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

а можно к этому видео, размещённом на ibase.ru приложить скрипты самого теста? Чтобы любой желающий мог попробовать у себя.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39420104
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvНо я это обдумывал, и пришел к выводу, что нифига это не даст, кроме вероятной "фрагментированности" страниц (которую тоже надо будет проверить при повторении теста).Плохо обдумывал
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39420112
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad> Плохо обдумывал

А что в 2.5 происходит при локе, ждёт или ищет другую?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39420113
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

дык в 2.5 страницы по другому выделяются - одна за одной. А в 3.0 может выделяться пачками (эсктентами)
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39420118
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис приложить скрипты самого теста?
может быть. А может и нет, в силу специфики "обвязки" для запуска isql. В минимальном варианте можно проверить на 1 и двух коннектах:
- создать таблицу
- сгенерить в ней млн записей (хоть ибэкспертом)
- экспортнуть эти данные в текст, это будет скрипт1
- разрезать скрипт1 пополам, это будет скрипт2
- померять время на 1м isql и на двух запущеных хоть с интервалом в 1 сек.

это так, чтобы не ждать.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39420131
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисдык в 2.5 страницы по другому выделяются - одна за одной. А в 3.0 может выделяться пачками (эсктентами)Именно. И поиск свободного места\не залоченной страницы осуществляется в пределах текущего экстента.
Не самый эффективный алгоритм, тут есть что улучшать.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39420134
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvтолько ПК
В следующем тесте добавь один или два.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39420144
Фотография o_v_a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я на днях уж посмотрел. И, вроде, даже лайкнул. :)
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421459
Romanzek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,
интересует:
1. Сервер однопроцессорный или нет?
2. Диски SSD или железка?

Можно ли получить ваш набор в виде, годном для запуска?
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421567
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RomanzekСервер однопроцессорный или нет?
какая разница, интересно? Особенно если посмотреть на результаты 1, 2 и 4 коннектов. Ядер-то 12.
И, сейчас точно не могу сказать, но явно процессор один, 6-ядерные на серверах вроде не бывают.
RomanzekДиски SSD или железка?
вроде RAID из SATA-дисков. Точно не SSD.

скрипты возможно дадим, но позже. Перепроверять на 3.0.2 будем.
Однако, мне интересно - что вы хотите получить перепроверкой теста у себя? То есть, вы хотите сравнить с приведенными результатами, или вы ожидаете, что результаты на разных архитектурах будут как-то сильно отличаться от наших результатов?
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421587
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Kdv!
You wrote on 17 марта 2017 г. 14:57:23:

Kdv> 6-ядерные на серверах вроде не бывают.а для кого ж Intel 6-ядерные Xeon'ы клепает?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421594
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv6-ядерные на серверах вроде не бывают.у нас пара таких в сервере.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421686
Romanzek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvRomanzekСервер однопроцессорный или нет?
какая разница, интересно? Особенно если посмотреть на результаты 1, 2 и 4 коннектов. Ядер-то 12.
И, сейчас точно не могу сказать, но явно процессор один, 6-ядерные на серверах вроде не бывают.

Разница может быть очень существенной. Так как CFS ;-)
Более того, там еще от модели процессора зависит поведение планировщика.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421703
Romanzek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мы кстати тоже проводили подобные тесты. Но не с целью доказать, что производительность в нескольких потоках снижается - это мы и так понимаем. Наша цель была нащупать предел, после которого наступает серверный коллапс. То есть производительность падает до нуля (что и случалось у нас в продакшине). Но, к сожалению, синтетикой это нащупать оказалось крайне тяжело. Пришлось делать полноценный нагрузочный тест в приложении.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421735
Коваленко Дмитрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

У меня c FB3 SS получилась немного другая картина.

6950X (10C:20T)/128GB/Win10.

FB 3.0.2.32692 x64 SuperServer.

DefaultDbCachePages = 200000
MaxUnflushedWrites = -1
MaxUnflushedWriteTime = -1

База на RAM диске. Страница 16KB. FW: OFF.

Тестовая таблица - 1 колонка (BIGINT, PK). Есть триггер.

Перед каждым запуском база приводится к исходному состоянию.

На момент проведения этих тестов FB уже накрутил 200 часов (User Time), но перегружать я его не буду.

Вставка 1 млн записей:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
потоков  время(сек)
1           128
2            93
4            51
8            36
10           34
20           33

Вставка 10 млн записей (пробовал только один раз):
Код: plaintext
1.
2.
3.
4.
5.
6.
1          1306
2           640
4           391
8           319
10          315
20          313

Код теста на C#
Код: c#
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.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
using System;
using System.IO;
using System.Threading;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using structure_lib=lcpi.lib.structure;
using xdb=lcpi.data.oledb;

namespace Sample_024{
////////////////////////////////////////////////////////////////////////////////
//class Program

class Program
{
 public const string c_prog_arg__cn_str       = "cn_str";
 public const string c_prog_arg__thread_count = "thread_count";
 public const string c_prog_arg__rec_num      = "rec_num";
 public const string c_prog_arg__log_file     = "log_file";
 public const string c_prog_arg__summary_file = "summary_file";

 //-----------------------------------------------------------------------
 private static int Main()
 {
  int result = 0;

  try
  {
   result=Exec();
  }
  catch(Exception e)
  {
   ++result;
   Console.WriteLine("ERROR: {0}",e.Message);
  }//catch

  return result;
 }//Main

 //-----------------------------------------------------------------------
 private static int Exec()
 {
  int errCount=0;

  var cmdArgs = new structure_lib.t_command_line_parser('/');

  cmdArgs.reg_arg
   (c_prog_arg__cn_str,
    structure_lib.t_command_line_argument_flags.with_value);

  cmdArgs.reg_arg
   (c_prog_arg__thread_count,
    structure_lib.t_command_line_argument_flags.with_value);

  cmdArgs.reg_arg
   (c_prog_arg__rec_num,
    structure_lib.t_command_line_argument_flags.with_value);

  cmdArgs.reg_arg
   (c_prog_arg__log_file,
    structure_lib.t_command_line_argument_flags.with_value);

  cmdArgs.reg_arg
   (c_prog_arg__summary_file,
    structure_lib.t_command_line_argument_flags.with_value);

  //-----------------------------------
  cmdArgs.parse(Environment.CommandLine);

  //-----------------------------------
  string Arg_log_file
   =cmdArgs.get(c_prog_arg__log_file,true).Value;

  var log=new ProgramLog(Arg_log_file);
 
  try
  {
   log.Send("Hello from test!");

   //-----------------------------------
   var startupData=new StartupData(cmdArgs);

   log.Send("CommandLine: {0}",Environment.CommandLine);
   log.Send("Threads    : {0}",startupData.m_arg__thread_count);
   log.Send("Records    : {0}",startupData.m_arg__rec_num);

   //-----------------------------------
   log.Send("Try to connect to database ...");

   using(var cn=new xdb.OleDbConnection(startupData.m_arg__cn_str))
   {
    cn.Open();

    using(var tr=cn.BeginTransaction())
    {
     var cmd=new xdb.OleDbCommand("delete from TEST_SEQUENTIAL_MOVE",cn,tr);

     cmd.ExecuteNonQuery();
  
     tr.Commit();
    }//using tr

    log.Send("OK!");
   }//using cn

   //---------------------------------- create workers
   log.Send("Create workers ...");

   var workers=new ThreadWorker[startupData.m_arg__thread_count];
  
   {
    var generator=new GeneratorSeq(startupData);

    for(uint i=0;i!=startupData.m_arg__thread_count;++i)
     workers[i]=new ThreadWorker(startupData,i,generator);
   }//local

   //----------------------------------
   log.Send("Create threads ...");

   var threads=new System.Threading.Thread[startupData.m_arg__thread_count];
   
   DateTime startTS;

   try
   {
    for(uint i=0;i!=startupData.m_arg__thread_count;++i)
    {
     var t=new System.Threading.Thread(workers[i].Run);

     t.Start();

     workers[i].m_InitEvent.WaitOne();

     threads[i]=t;
    }//for i

    startTS=DateTime.Now;

    startupData.m_StartEvent.Set();
   }
   finally
   {
    for(uint i=0;i!=startupData.m_arg__thread_count;++i)
    {
     if(!Object.ReferenceEquals(threads[i],null))
     {
      log.Send("Wait thread {0}",i+1);

      threads[i].Join();

      if(!Object.ReferenceEquals(workers[i].m_exc,null))
      {
       ++errCount;

       log.Send("ERROR: {0} - {1}",workers[i].m_exc.Source,workers[i].m_exc.Message);
      }
     }//if
    }//for i
   }//finally

   var endTS=DateTime.Now;

   long duration=(long)(endTS-startTS).Duration().TotalSeconds;

   log.Send("Duration: {0} second(s).",duration);

   //----------------------------------
   {
    ulong n=0;

    for(uint i=0;i!=startupData.m_arg__thread_count;++i)
    {
     n+=workers[i].m_cRecords;

     log.Send("Thread [{0}]: {1:###} record(s)",i,workers[i].m_cRecords);
    }
   
    if(n!=(ulong)startupData.m_arg__rec_num)
    {
     throw new ApplicationException(string.Format("Wrong work. Inserted {0}. Expected {1}",
                                    n,
                                    startupData.m_arg__rec_num));
    }//if
   }//local
    
   //----------------------------------
   using(var sf=new StreamWriter(cmdArgs.get(c_prog_arg__summary_file,true).Value,true))
   {
    sf.WriteLine("{0}\t{1}\t{2}",
                 startupData.m_arg__rec_num,
                 startupData.m_arg__thread_count,
                 duration);

    sf.Close();
   }
  }
  finally
  {
   log.Close();
  }//finally

  return errCount;
 }//Exec
}//class Program

////////////////////////////////////////////////////////////////////////////////
//class ProgramLog

class ProgramLog
{
 public ProgramLog(string logFileName)
 {
  m_log_file=new StreamWriter(logFileName,false);
 }

 public void Send(string s,params object[] args)
 {
  string line=string.Format(s,args);

  line=Helper__BuildTS()+" "+line;

  Console.WriteLine("{0}",line);

  m_log_file.WriteLine("{0}",line);
 }//Send

 public void Close()
 {
  m_log_file.Close();
 }//Close

 private static string Helper__BuildTS()
 {
  var ts=DateTime.Now;

  return ts.ToString("[dd.mm.yyyy hh:mm:ss]");
 }

 private StreamWriter m_log_file;
};//class ProgramLog

////////////////////////////////////////////////////////////////////////////////
//class StartupData

class StartupData
{
 public readonly string m_arg__cn_str;
 public readonly uint   m_arg__thread_count;
 public readonly long   m_arg__rec_num;

 public readonly ManualResetEvent m_StartEvent;

 public StartupData(structure_lib.t_command_line_parser cmdArgs)
 {
  m_arg__cn_str=cmdArgs.get(Program.c_prog_arg__cn_str,true).Value;

  //-----------------------------------
  m_arg__thread_count
   =uint.Parse(cmdArgs.get(Program.c_prog_arg__thread_count,true).Value);

  if(m_arg__thread_count==0)
   throw new ApplicationException("Incorrect number of threads");

  //-----------------------------------
  m_arg__rec_num
   =long.Parse(cmdArgs.get(Program.c_prog_arg__rec_num,true).Value);
 
  if(m_arg__rec_num<=m_arg__thread_count)
   throw new ApplicationException("Incorrect number of records");

  //-----------------------------------
  m_StartEvent=new ManualResetEvent(false);
 }//StartupData

 //------------------------------------
 public bool GenNum(out long v)
 {
  v=Interlocked.Increment(ref m_rec_num);

  if(m_arg__rec_num<v)
   return false;

  return true;
 }//GenNum
   
 //------------------------------------
 private long m_rec_num=0;
};//class StartupData

////////////////////////////////////////////////////////////////////////////////
//interface Generator

interface Generator
{
 bool Gen(out long v);
};//interface Generator

 ////////////////////////////////////////////////////////////////////////////////
//class GeneratorSeq

class GeneratorSeq:Generator
{
 public GeneratorSeq(StartupData startupData)
 {
  m_StartupData=startupData;
 }

 //interface -------------------------------------------------------------
 public bool Gen(out long v)
 {
  return m_StartupData.GenNum(out v);
 }//Gen

 private readonly StartupData m_StartupData;
};//class GeneratorSeq

////////////////////////////////////////////////////////////////////////////////
//class ThreadWorker

class ThreadWorker
{
 public Exception m_exc=null;

 public readonly StartupData m_StartupData;

 public readonly Generator m_Generator;

 public readonly ManualResetEvent m_InitEvent;

 public readonly uint m_ThreadIndex;

 public ulong m_cRecords=0;

 public ThreadWorker(StartupData startupData,
                     uint        index,
                     Generator   generator)
 {
  m_StartupData=startupData;

  m_Generator=generator;

  m_InitEvent=new ManualResetEvent(false);

  m_ThreadIndex=index;
 }//ThreadWorker

 public void Run()
 {
  try
  {
   using(var cn=new xdb.OleDbConnection(m_StartupData.m_arg__cn_str))
   {
    cn.Open();

    using(var tr=cn.BeginTransaction())
    {
     using(var cmd=new xdb.OleDbCommand(null,cn,tr))
     {
      cmd.CommandText=
       "insert into TEST_SEQUENTIAL_MOVE (ID) values(:id)";

      cmd.Prepare();

      m_InitEvent.Set();

      m_StartupData.m_StartEvent.WaitOne(); //infinite!

      long v;
  
      while(m_Generator.Gen(out v))
      {
       cmd[0].Value=v;

       cmd.ExecuteNonQuery();

       ++m_cRecords;
      }//while
     }//using cmd
     tr.Commit();
    }//using tr
   }//using cn
  }
  catch(Exception e)
  {
   m_exc=e;
  }//catch
 }//Run
};//class ThreadWorker

////////////////////////////////////////////////////////////////////////////////
}//namespace Sample_024



run1.bat - запуск теста
Код: plaintext
1.
2.
copy /Y d:\Database\FB_03_0_0\__clear\IBP_TEST_FB30_D3.GDB d:\Database\ram\IBP_TEST_FB30_D3.GDB

bin\vs2017_net46.2_Release\Sample_024.exe /cn_str "provider=LCPI.IBProvider.3;location=localhost:d:\database\ram\ibp_test_fb30_d3.gdb;user id=GAMER;password=vermut;dbclient_type=fb.direct" /thread_count %1 /rec_num %2 /log_file _logs\result_%1_%2.log /summary_file _logs\summary.log

run.bat - запуск группы тестов
Код: plaintext
1.
2.
3.
4.
5.
call run1.bat 1  %1
call run1.bat 2  %1
call run1.bat 4  %1
call run1.bat 8  %1
call run1.bat 10 %1
call run1.bat 20 %1

Лог запуска для 10млн записей и 8 потоков
Код: 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.
[17.09.2017 04:09:48] Hello from test!
[17.09.2017 04:09:48] CommandLine: bin\vs2017_net46.2_Release\Sample_024.exe  /cn_str "provider=LCPI.IBProvider.3;location=localhost:d:\database\ram\ibp_test_fb30_d3.gdb;user id=GAMER;password=vermut;dbclient_type=fb.direct" /thread_count 8 /rec_num 10000000 /log_file _logs\result_8_10000000.log /summary_file _logs\summary.log
[17.09.2017 04:09:48] Threads    : 8
[17.09.2017 04:09:48] Records    : 10000000
[17.09.2017 04:09:48] Try to connect to database ...
[17.09.2017 04:09:48] OK!
[17.09.2017 04:09:48] Create workers ...
[17.09.2017 04:09:48] Create threads ...
[17.09.2017 04:09:49] Wait thread 1
[17.15.2017 04:15:08] Wait thread 2
[17.15.2017 04:15:08] Wait thread 3
[17.15.2017 04:15:08] Wait thread 4
[17.15.2017 04:15:08] Wait thread 5
[17.15.2017 04:15:08] Wait thread 6
[17.15.2017 04:15:08] Wait thread 7
[17.15.2017 04:15:08] Wait thread 8
[17.15.2017 04:15:08] Duration: 319 second(s).
[17.15.2017 04:15:08] Thread [0]: 1113156 record(s)
[17.15.2017 04:15:08] Thread [1]: 1147915 record(s)
[17.15.2017 04:15:08] Thread [2]: 1183818 record(s)
[17.15.2017 04:15:08] Thread [3]: 1222949 record(s)
[17.15.2017 04:15:08] Thread [4]: 1263065 record(s)
[17.15.2017 04:15:08] Thread [5]: 1305448 record(s)
[17.15.2017 04:15:08] Thread [6]: 1353977 record(s)
[17.15.2017 04:15:08] Thread [7]: 1409672 record(s)

Возможно что-то здесь не так.

Но у меня нагрузочное тестирование в 4 потока идет ~16 часов. А в 8 потоков - ~10 часов. Тесты разные, но большая часть параллельно работает с одними и теми же таблицами.

В 4 потока можно запускать сразу два экземпляра тестов (для разных баз данных) - те же 16 часов. Плюс минус.

Естественно - нагрузочные тесты тоже на RAM-диске.

Так что цифры вышеприведенного теста вроде адекватные.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421771
Romanzek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коваленко Дмитрий,

Интересные результаты, спасибо
Будем теперь с нетерпением ждать релиза нашей тройки :)
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421774
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Romanzek!
You wrote on 17 марта 2017 г. 17:07:05:

Romanzek> Будем теперь с нетерпением ждать релиза нашей тройки :)обо что речь?
какой тройки?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421779
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коваленко Дмитрий,

спасибо, это было интересно.

БД на RAM диске, конечно, не может не отличаться от БД на HDD.

PS С 2.5 сравнить не хочешь в тех же условиях ? :)
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421791
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

как какой, он же из Red Soft
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421796
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Симонов Денис!
You wrote on 17 марта 2017 г. 17:30:05:

Симонов Денисон же из Red Softна нём не написано
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421828
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коваленко Дмитрий> У меня c FB3 SS получилась немного другая картина.

Спасибо, очень интересно. А можешь сравнить SS c CS (ну и SC до кучи) ?

hvlad> PS С 2.5 сравнить не хочешь в тех же условиях ? :)

Присоединяюсь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421869
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коваленко Дмитрий,

imho фигня полная. я даже не знаю, что комментировать.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421879
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коваленко Дмитрий,

все-таки комментарий появился. а с какого боку тут мульти-тредовое приложение? Тест про вставку из параллельных коннектов.
Кроме того, один коннект в ФБ что 2.5 что 3.0 не распараллеливается. А я у тебя что-то там вставки в N коннектах совсем не вижу. Может я код C# не понимаю, но тем не менее.
Отсюда вывод, что результаты тем более ахинейные, и ты просто меряешь распараллеливаемость своего OLE DB провайдера.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421882
Romanzek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

на каждый воркер отдельное подключение. Вроде все корректно.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421884
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Romanzek,

ткните меня носом в код. В любом случае, я уже такое количество тестов проводил, что нутром чую, что тест должен быть максимально чистым. В нашем случае мы стартовали isql с входным скриптом insert. Что может быть чище? Никакого оверхеда на компоненты, worker threads, и так далее.

Кроме того, результаты. в 20 потоках 1млн записей вставляется в 4 раза быстрее, чем в 1. Это при том, что все эти потоки лупят в одну таблицу. Где тут распараллеливаемость может "вдруг случиться", скажите мне?
Каким образом 32 isql втыкают записи на супере, на 12-ядерном проце так же, как в 1 коннекте, и каким образом 20 тредов из одного приложения втыкают этот же миллион записей в 4 раза быстрее чем 1 коннект? Откуда может быть такая разница?
Ну давайте, объясните мне.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421912
Коваленко Дмитрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladКоваленко Дмитрий,

спасибо, это было интересно.

БД на RAM диске, конечно, не может не отличаться от БД на HDD.

Да, я тоже эту фишку просёк :)

hvladPS С 2.5 сравнить не хочешь в тех же условиях ? :)
Да можно. Суперклассик? Я на ночь оставлю.

Гаджимурадов РустамА можешь сравнить SS c CS (ну и SC до кучи) ?

Рустам, по секрету - сиди на суперсервере тройки :)

---
Пока я глазел на студенток шатался, тут посчитались цифры для 40млн записей.
Код: plaintext
1.
2.
3.
4.
5.
6.
1	4981
2	2744
4	1807
8	1458
10	1413
20	1316

База с 18MB (пустая) опухла до 2.4GB - то есть она еще даже за пределы страничного кэша не вылезла (3.1гига).
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421913
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvНу давайте, объясните мне.Дисковая малёху пошустрей?

тест с isql готов прогнать на своем десктопе, если что.
конфиг i3 проц, ссд на 240 гиг, 16 гиг ОЗУ, Suse42.2 FB 3.0.2
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421916
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коваленко ДмитрийhvladPS С 2.5 сравнить не хочешь в тех же условиях ? :)
Да можно. Суперклассик? Я на ночь оставлю.SS тоже интересно.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421918
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvВ нашем случае мы стартовали isql с входным скриптом insert. Что может быть чище? Никакого оверхеда на компоненты, worker threads, и так далее.А у Коваленко препарированные инсерты. Ы ? :)
Или ты set bulk_insert умеешь готовить ? :)
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421921
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ещё у него таблица всего с одним полем (индекс есть) и с неизвестным триггером (вдруг он ускоряет инсерты ? ).
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421926
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladА у Коваленко препарированные инсерты. Ы ? :)
Или ты set bulk_insert умеешь готовить ? :)
ну и нахрена это надо? я не очень понимаю смысл такого теста. Ну фиг с ним, пусть препарированные. Но пусть запускает N процессов тогда. Не надо вот этой псевдо-многопоточности в C#.

hvladА ещё у него таблица всего с одним полем (индекс есть)
у нас в тесте было
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create table fix (
    id bigint not null
    ,rate_time timestamp not null
    ,dbwrite_time timestamp not null
    ,quote_ref int not null
    ,rate_bid double precision not null
    ,rate_ask double precision not null
    ,src_bid_ref int not null
    ,src_ask_ref int not null
    ,sl_session_uid bigint
    ,constraint pk_fix primary key (id) using index pk_fix
);



Что с одним, что с двумя столбцами - это напороться на артефакт с 50% заполнением страниц. Я про это уже несколько раз писал. Правда, на ФБ 3 не проверял.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421970
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
господа. Для повтора теста требуется некий консенсус по поводу условий этого теста.
Если я еще понимаю
1. проверку вставки без индексов совсем
хотя это нереальный случай, то
2. проверка вставки с несколькими индексами
относится несколько к другому тесту - а именно - замедлению вставки при увеличении количества индексов.
Понятно, что к тесту как таковой параллельной вставки это имеет мало отношения. У нас уже были семинары (за рубежом и в Москве) где Алексей Ковязин показывал разницу между вставкой с индексом bigint и индексом varchar(36).
То есть, понятно, что вставка с увеличением количества индексов замедлится, и ее можно было бы проверить в монопольном режиме, достаточно быстро, а дальше уже экстраполировать на результаты "минимальной" вставки в отношении "многопользовательского режима".

Но - вы чего хотите-то? Например, у нас в кулуарах зашел вопрос об использовании gen_id. Например, если его вообще исключить, то получится сугубо синтетический тест. С другой стороны, вызов gen_id на каждый insert "монополизирует" вставку. Но в реальной системе-то идентификаторы как-то генерятся! gen_id напрямую, или триггерами, или еще бог знает как.
Проводить тест "налысо", т.е. без минимальной привязки к практическому программированию, я не вижу смысла.

Соответственно, возникает вопрос. Либо повторить тест в том виде, в каком он был сделан, именно на 3.0.2, либо повторить тест с множеством отклонений. Понятно, что меня тоже интересует разница "вообще, при разных условиях". Но поскольку сам по себе тест займет не меньше недели (к слову, я
YouTube Video
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421971
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

экая хня. урл на ютуб в теге http движок развернул в embedded видео. тут я не виноват.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421978
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты хочешь набор мнений услышать или чего?
Для этого надо четкую цель теста озвучить.

Лично я за тест на одной плоской таблице,
с 5-7 полями (2 строковых, остальные int),
в разрезе 1-8 коннектов по всем архитектурам,
а) без индексов совсем б) с PK+ 1-2 индекса.

10-40 лямов записей не нужно - достаточно,
чтобы минимальная длительность превышала
30 секунд и была стабильна. Ну и 2.5 vs 3.0.

kdv> gen_id. Например, если его вообще исключить,
kdv> то получится сугубо синтетический тест
kdv> Проводить тест "налысо", т.е. без минимальной привязки
kdv> к практическому программированию, я не вижу смысла.

Так он и сейчас синтетический. Теоретически, его
можно и позже "присвоить" update where pk is null.
А насчет реальной системы - в реально системе это
всё вряд ли будет монопольно, не говоря уже о том,
что у таблицы есть зависимости.

Неделей раньше или позже - значения не имеет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421980
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам10-40 лямов записей не нужно - достаточно,
чтобы минимальная длительность превышала
30 секунд и была стабильна. Ну и 2.5 vs 3.0
как видим, тут и 1 млн записей достаточно.
Гаджимурадов РустамТак он и сейчас синтетический.
тут ты совсем неправ. Исходный тест был разработан по мотивам (и со структурой таблицы) конкретной компании. Для проверки, что там у них "распараллеливается". Выяснилось, что все это фикция.
Гаджимурадов РустамА насчет реальной системы - в реально системе это всё вряд ли будет монопольно, не говоря уже о том, что у таблицы есть зависимости.
гм, что??? в куче систем есть задача по массовой заливке данных. Понятно что в 90% этих систем может быть задача по массовому обновлению данных, но это уже несколько другая тема :-)

в частности, мы периодически выкладывали логи нашего теста oltp-emul
https://ib-aid.com/en/logs-3-0/
Это куда более "синтетично" чем просто вставка или update. Это эмуляция вполне реальной системы.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421984
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv> Исходный тест был разработан по мотивам
kdv> (и со структурой таблицы) конкретной компании

Она у них без зависимостей что ли?!

> гм, что??? в куче систем есть задача по массовой заливке данных.

И? Они заливку ночером на одной таблице запускают?
Это разве что с репликацией какой-то сравнить, да и-то
сильно вырожденный случай.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421989
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, да.
Интересно бы знать цель теста. И этого и нового.

Вот, например, вчера по рассылке ссылка на видео пришла.
[spoiler] Видео
YouTube Video
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421994
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Цель всех тестов - сравнить. Вопросы звучат
как "что сравнивать?" и "чтобы что узнать?".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421998
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv2. проверка вставки с несколькими индексами
относится несколько к другому тесту - а именно - замедлению вставки при увеличении
количества индексов.

Лично у меня есть подозрение, что это замедление вставки - тоже миф и большее количество
индексов увеличит распараллеливание.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39421999
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

в том и вопрос: "чтобы что узнать".

Вот (например), лично для тебя, как для разработчика - какая польза от информации, что на десктопном компе с 4Гб ОЗУ фаерберд 2.1 ресторит базу быстрее, чем FB 2.5?
Это чем-то напоминает сие сообщение "британских ученых" .

Общий вес жертв пауков составляет 400-800 миллионов тонн в год.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422002
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамОна у них без зависимостей что ли?!
каких зависимостей?
что значат "зависимости" в твоем понимании? FK? Триггеры?
Гаджимурадов РустамИ? Они заливку ночером на одной таблице запускают?
нет, постоянно заливка работает. биржевые котировки, микротранзакции.
Гаджимурадов РустамЭто разве что с репликацией какой-то сравнить, да и-то сильно вырожденный случай.
да х. с ним. Есть же у людей задачи вставки нового товара, обновления прайсов, и прочего.
чччДИнтересно бы знать цель теста. И этого и нового.
есть такая мулька - "параллельно вставлять". Этот тест показал, что эта "мулька" бессмыслена.
чччДНо какая польза разработчику от этой информации?
разработчику пользы нет, а администратору - есть. По крайней мере он может
- оценить 2.0 vs 2.1 2.5 если сидит на 2.0
- оценить restore с теми или иными опциями (-se или прочее)
чччДНаверняка, цель какая-то была. Но вот какая - непонятно.
лично у меня была цель сравнить IB и FB. Ну и остальное.
Dimitry Sibiryakovчто это замедление вставки - тоже миф и большее количество индексов увеличит распараллеливание.
ну пендец...
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422004
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv...
чччДНо какая польза разработчику от этой информации?
разработчику пользы нет, а администратору - есть. По крайней мере он может
- оценить 2.0 vs 2.1 2.5 если сидит на 2.0
...

И?
Администратор, посмотрев твои видео, потребует от разработчика мигрировать программный комплекс на новую версию???

С каких пор администратор принимает решение о выборе СУБД?
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422008
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДАдминистратор, посмотрев твои видео, потребует от разработчика мигрировать программный комплекс на новую версию???
госпидя. как будто видео (или статья) прямо толкает админа на какие-то действия. Все эти тесты расчитаны на тех, кто знает, что существуют разные версии ФБ, ИБ, и так далее. И на тех, кто может делать выбор. На КОНЕЧНЫХ ПОЛЬЗОВАТЕЛЕЙ ВСЯ ЭТА ХЕРНЯ НЕ РАСЧИТАНА!
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422009
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёп, я просто поражаюсь. конечные пользователи читают тесты о сравнении версий ИБ и ФБ? Они смотрят видео про сравнение параллельной вставки на разных архитектурах?
Ядрена мать, я был такого низкого мнения о конечных пользователях софта на ФБ! Они, оказывается, вовсю меняют конфиг ФБ, железо, и даже код их приложений (про управление транзакциями и оптимальный SQL)! ОНИ ЧИТАЮТ IBASE.RU!
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422010
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvчччДАдминистратор, посмотрев твои видео, потребует от разработчика мигрировать программный комплекс на новую версию???
госпидя. как будто видео (или статья) прямо толкает админа на какие-то действия. Все эти тесты расчитаны на тех, кто знает, что существуют разные версии ФБ, ИБ, и так далее. И на тех, кто может делать выбор. На КОНЕЧНЫХ ПОЛЬЗОВАТЕЛЕЙ ВСЯ ЭТА ХЕРНЯ НЕ РАСЧИТАНА!

И так, ни "конечным пользователям", ни разработчикам этот тест не нужен. Нужен админам:
kdvПо крайней мере он может
- оценить 2.0 vs 2.1 2.5 если сидит на 2.0

Но на мнение админов разработчикам обычно перепендикулярно.


С другой стороны - ну не зря же ты эти тесты делал. Десятки часов. Наверное, кому-то нужно. Кому?

PS: извините, если что.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422012
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

сайт ibase.ru наполнен полезнейшей информацией. Я всех туда отправляю и сам периодически читаю-перечитываю.

Вопрос - о конкретном тесте. Ну, оценили время рестора.
И что? Кто конкретно должен учесть результаты тестирования в своей работе?
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422013
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДНаверное, кому-то нужно. Кому?
ну, немцы любят такие штуки - всякие сравнения и т.п.
разработчикам тоже надо понять, что быстрее и как.

и, если бы вот это мое видео было неинтересно, не было бы топика на три страницы. Люди хотят понять, имеет смысл параллельная вставка или нет, и в каких случаях.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422015
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvразработчикам
я имею в виду в первую очередь разработчиков систем на ФБ. Впрочем, разработчикам Firebird такие тесты тоже полезны. Обычно, если есть непонятные результаты тестов, мы их не публикуем, а спрашиваем разработчиков ФБ, "почему так".
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422016
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

твое видео интересно безотносительно цели тестирования.

Но ведь нельзя все время выезжать на талантливой игре актеров, нужно какой-то сюжет в сценарий включить, чтобы интрига была. :)
Вон, например, как когда ты терабайтную базу гонял.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422017
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv...разработчикам Firebird такие тесты тоже полезны. Обычно, если есть непонятные результаты тестов, мы их не публикуем, а спрашиваем разработчиков ФБ, "почему так".

ОК, этот ответ полностью удовлетворил.
Спасибо, и еще раз извиняюсь за нудёж.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422101
Коваленко Дмитрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladSS тоже интересно.
Чтобы два раза не вставать, протестировал все.



Логи, базы, XLSX, исходный код теста
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422144
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коваленко Дмитрий> Чтобы два раза не вставать, протестировал все.

О, большое спасибо. Хай живе 2.5 CS!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422147
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv> каких зависимостей?
> что значат "зависимости" в твоем понимании? FK? Триггеры?

Да, другие таблицы с FK, триггеры с чеками и ХПами.

> нет, постоянно заливка работает

Она монопольно работает что ли?

> лично у меня была цель сравнить IB и FB. Ну и остальное.

ИМХО, на IB всем начхать. Ну может кроме ДЕ и Ко
ради потешить самолюбие, и-то сильно сомневаюсь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422154
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамИМХО, на IB всем начхать.

ну почему же, интересно знать как там конкуренты ФБ поживают.

Коваленко Дмитрий,

результаты Firebird 3 могли бы быть чуть лучше (где-то 1-3%), если бы было выключено шифрование подключения.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422158
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисрезультаты Firebird 3 могли бы быть чуть лучше (где-то 1-3%), если бы было выключено шифрование подключения.Ну вот что ты сравнивашь ?
1-20 шт. затрат на коннект с шифрованием - и вставка 1-10 млн записей с клиента (т.е. соотв. кол-во вызовов АПИ).
Ещё раз подумай...
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422166
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис> результаты Firebird 3 могли бы быть чуть лучше (где-то 1-3%)

Я не знаю, насколько справедливо твоё замечание,
особенно с учетом слов Влада, но даже если так, то
1-3% - это в любом случае в пределах погрешности,
мало заслуживающей внимания.

Скорее уж тут надо сравнивать на более широких
таблицах + (без индексов | c 2-3 индексами).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422199
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коваленко Дмитрий,

я уже говорил, что результаты твоего теста - фигня какая-то. Проверил 1млн вставку СКРИПТОМ, в isql, Firebird 3.0 SS, 1 столбец bigint+пк, 16к страница.
Диск sata.
FW=ON - 70 секунд, FW=OFF - 65 секунд.
А у тебя на RAM-диске - 128 секунд.
Ну да, триггера before insert у меня нет. Тем не менее.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422212
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему фигня-то? Просто тест снижает влияние IO из-за HDD vs RAM.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422247
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvПроверил 1млн вставку СКРИПТОМ, в isql
То есть к собственно вставке ты примешал ещё борьбу за кэш метаданных, ACL и парсер.
Теперь осталось угадать какая из этих частей плохо распараллеливается.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422274
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvвставку СКРИПТОМ
вот это вообще не вижу смысла бенчмаркать, кого волнует производительность вставки так делать никогда не будут
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422319
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не будут - не так важно. Куда важнее сравнить
isql-скрипт c обычным вариантом через preapre.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422346
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovТо есть к собственно вставке ты примешал ещё борьбу за кэш метаданных, ACL и парсер.
ну что за....

я просто сделал скрипт с 1млн инсертов, и запустил его в isql. ОДИН раз, один isql, просто для сравнения с результатами Коваленко.
И сравнил полученные 65 секунд с его 128 секунд на RAM диске.
Какая еще борьба за кэш, и прочее?
dimitrвот это вообще не вижу смысла бенчмаркать, кого волнует производительность вставки так делать никогда не будут
да ё-мое. У Коваленко в одном коннекте 128 секунд, препарированные вставки, на РАМ диске. У меня - 65 секунд на одном коннекте, текстовые инсерты, на SATA.
Гаджимурадов Рустамisql-скрипт c обычным вариантом через preapre.
именно! Почему у меня скриптом в 2 раза быстрее чем prepare?

p.s. до кучи - размер кэша ФБ на рестор не влияет, соответственно на тест инсертов он тоже влиять не будет. Поэтому никакого смысла задирать кэш суперсерверу в этом тесте не было.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422358
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv> я просто сделал скрипт с 1млн инсертов

Даже EB/SP было бы лучше, наверное.

> Почему у меня скриптом в 2 раза быстрее чем prepare?

Ежа с ужом. У вас компы разные, всё разное.
Размер кеша на простые инсерты и не должен
влиять, за какими-то необычными случаями.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422377
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамЕжа с ужом. У вас компы разные, всё разное.

то есть, Intel I7-6950X хуже AMD FX8350 ?
http://cpuboss.com/cpus/Intel-6950X-vs-AMD-FX-8350

база в RAM хуже SATA? Когда разница в 2 раза ! в голове должно возникнуть подозрение, что "что-то тут не так". Я считаю, что если C# в 2 раза медленнее скрипта, значит проблема в C#.
Придется написать тест с prepare, с gen_id в скрипте, и gen_id в триггере. И сравнить между собой уже эти вещи, как минимум однопоточно.

p.s. битва! :-)
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422378
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

для начала добавь триггер :)
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422379
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvто есть, Intel I7-6950X хуже AMD FX8350 ?
http://cpuboss.com/cpus/Intel-6950X-vs-AMD-FX-8350
cpubossReasons to consider the
AMD FX 8350
Significantly higher clock speed 4 GHz vs 3 GHz Around 35% higher clock speed
Higher turbo clock speed 4.2 GHz vs 3.5 GHz More than 20% higher turbo clock speed
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422384
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladдля начала добавь триггер :)
я бы добавил, но ты меня этим советом ввел в ступор. В таблице Коваленко ведь 1 столбец. А что тогда в insert писать, если есть триггер?
insert into test values (ШТО?!?!)
:-)
hvladReasons to consider the
там же написано, что в одноядерном режиме они почти эквивалентны. А вот 128 секунд и 65 секунд - не эквивалентны.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422412
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvя бы добавил, но ты меня этим советом ввел в ступорВыйди из ступора и добавь пустой триггер :)

kdvтам же написано, что в одноядерном режиме они почти эквивалентны.Заборы - они такие, там тоже пишут.
А вот мегагерцы - их никто не отменял.

kdvА вот 128 секунд и 65 секунд - не эквивалентны.Ну так у вас и условия теста мало в чём совпадают
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422420
Коваленко Дмитрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladдля начала добавь триггер :)
Да нет.

Для начала надо заставить восемь экземпляров isql отрабатывать в 4 раза быстрее.

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

Удобно же.

----
0. Тест был написан максимально корректно - в нем даже не учитывается время на инициализацию подключения/транзакции/запроса. Можно было бы исключить время на коммиты и завершение работы потоков, но мне это пришло в голову только сейчас.

И конечно же, каждый поток работает со своим подключением.

На 10 потоках и fb3_ss/cs/sc процессор (с HT) показывает загрузку на половину. То есть, можно считать, что все ядра загружены работой.

1. До RAM-диска там дело не доходит - потому что страничный кэш (3GB) больше чем база данных (600MB).

Собственно, можно и на RAID из HDD выполнить (у меня он, такой RAID, тоже есть) - но смысла в этом уже нет. Потому что ответ на вопрос "про параллельную вставку в одну таблицу" уже получен.

В начале я думал, что в тесте с isql затык связан с дисками. И индексом. Поэтому и применил эту "тяжелую артиллерию".

Результат согласуется с моим другим наблюдением - нагрузочное тестирование IBProvider-а в восемь потоков (10 часов) быстрее в полтора раза чем в четыре потока (15-16 часов). Кстати, как раз на восьми потоках RAM-диск и демонстрирует себя во всей красе.

2. Почему-то не возникает вопрос - почему на одном подключении fb25_ss работает на 25% быстрее чем fb3_ss.

Но вот почему "однопоточная" загрузка через isql работает быстрее чем через два ( ДВА , Карл) провайдера (каждый из которых на порядки сложнее чем этот isql) - это мы не понимаем. Или делаем вид, что как не понимаем.

Ну хорошо, я объясню.

Как только isql начнет работать поставщиком данных, реализующим спецификации OLE DB + ADO.NET + сопутствующие требования к таким вещам, цифры выравняются.

3. Можно взять родной ADO.NET провайдер для FB и натянуть мой тест на него (там работы на 10 минут). Этот провайдер без претензий, поэтому работает ощутимо быстрее.

Впрочем, взять что угодно (FIB/IBO/IBX/ISC API) и проверить на них.

И меня смешит, что за четыре дня никто, из здесь отметившихся, этого не сделал.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422443
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коваленко ДмитрийДля начала надо заставить восемь экземпляров isql отрабатывать в 4 раза быстрее.Ты (и kdv) не правильно интерпретируете полученные результаты :)
На примере твоих данных: я, например, вижу, что движок в состоянии залить 1млн записей (в твою таблицу с индексом и триггером) за 31 сек.
Твой код имеет значительный оверхед, который хороо виден на одном потоке и который удаётся преодолеть где-то 4-8 потокам.
Что радует - при увеличении кол-ва потоков нет деградации производительности (хотя причины для неё вполне есть). Не знаю, как оно было бы для 32-64-128 потоков.
У isql оверхед другой, там и картина чуть другая. Вот и весь "секрет".
Коваленко ДмитрийНа 10 потоках и fb3_ss/cs/sc процессор (с HT) показывает загрузку на половину. То есть, можно считать, что все ядра загружены работой.А какая загрузка у процесса FB и какая - у твоего теста ?
Коваленко Дмитрий нагрузочное тестирование IBProvider-а в восемь потоков (10 часов) быстрее в полтора раза чем в четыре потока (15-16 часов) А там что, тоже долбится одна и таже таблица ?
Коваленко ДмитрийПочему-то не возникает вопрос - почему на одном подключении fb25_ss работает на 25% быстрее чем fb3_ss.Потому что на него 100500 раз отвечали уже
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422444
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коваленко ДмитрийИ меня смешит, что за четыре дня никто, из здесь отметившихся, этого не сделал.Здесь Дельфи не знают (c) (tm), а ты про какой-то ужасный Ц-шарп :)
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422447
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коваленко ДмитрийДо RAM-диска там дело не доходит - потому что страничный кэш (3GB) больше чем база данных (600MB).Тут ты тоже не прав, кстати. Т.к. ты не менял FileSystemCacheTreshold, то ты выключил кеширование на уровне FS и любой IO превратился в синхронный непосредственный обмен с RAM диском.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422504
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коваленко Дмитрий. До RAM-диска там дело не доходит - потому что страничный кэш (3GB) больше чем база данных (600MB).
если ты так веришь, что кэш фб работает на массовые вставки - зачем тогда суперу выставил здоровенный кэш? В конце-концов мог бы еще один раз запустить тест супера с дефолтным кэшем.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422568
Коваленко Дмитрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvКоваленко Дмитрий. До RAM-диска там дело не доходит - потому что страничный кэш (3GB) больше чем база данных (600MB).
если ты так веришь, что кэш фб работает на массовые вставки - зачем тогда суперу выставил здоровенный кэш?
Это размер кэша, в который целиком помещается база после нагрузочного тестирования на FB3_SS.

Я не стал его менять для этого теста с инсертами на суперсервере.

Какой смысл мне жадничать?

kdvВ конце-концов мог бы еще один раз запустить тест супера с дефолтным кэшем.
Меня не просили, я не запускал.

А сам я в последнее время недогадливый стал.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422599
Коваленко Дмитрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladКоваленко ДмитрийНа 10 потоках и fb3_ss/cs/sc процессор (с HT) показывает загрузку на половину. То есть, можно считать, что все ядра загружены работой.А какая загрузка у процесса FB и какая - у твоего теста ?

Прямо сейчас померил (2 раза) 1млн в один поток. Лучший вариант:
- Тест работал 138 секунд.
- Тестовый процесс 58 секунд (User Time: 34 секунды).

hvladКоваленко Дмитрий нагрузочное тестирование IBProvider-а в восемь потоков (10 часов) быстрее в полтора раза чем в четыре потока (15-16 часов) А там что, тоже долбится одна и таже таблица ?

Таблиц в базе много. Но в какой то момент времени, как правило, тесты мучают одну или две.

Например таблица TBL_CS__WIN1251 - на ней проверяются разные комбинации кодовой страницы подключения/кодовой страницы клиента/разные способы вставки и чтения/разные типы (CHAR/VARCHAR/BLOB/массивы). Для каждого символа кодовой страницы 1251.

Если прогонять эти проверки последовательно - уже никакой жизни не хватит.

Или ты мне хочешь сказать, что я неправильно работаю с Firebird?

Ну, неправильно, да.

Правильно было раньше.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422602
Коваленко Дмитрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladКоваленко ДмитрийДо RAM-диска там дело не доходит - потому что страничный кэш (3GB) больше чем база данных (600MB).Тут ты тоже не прав, кстати. Т.к. ты не менял FileSystemCacheTreshold, то ты выключил кеширование на уровне FS и любой IO превратился в синхронный непосредственный обмен с RAM диском.
FileSystemCacheTreshold, наверное, появился после того как я перестал интересоваться вопросом "как еще можно ускорить сервер собственными средствами?". После 2010?

Спасибо, попробую.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422621
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коваленко Дмитрий,

твои тесты твоего же драйвера тут мало кого интересуют. Любые посторонние штуки делают тест "не чистым". Что за проблема создать пустую базу и туда уже положить таблицу для теста insert? Кого, нафиг, интересует тест вставки в таблицу из ОДНОГО столбца? Ну ей-богу...
Коваленко ДмитрийСпасибо, попробую.
чего там пробовать-то. смотришь RAMMAP, есть твоя база в файловом кэше, или нет. Если нет, значит ты кэш ФБ в конфиге задул больше FileSystemCacheTreshold, и все. А там по умолчанию 64к страниц.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39422643
Коваленко Дмитрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvКоваленко Дмитрий,

твои тесты твоего же драйвера тут мало кого интересуют.
Они и мне не очень интересны. До тех пор пока не найдут какую нибудь херню. Как правило - на стороне сервера.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
ANN: видео о мифе эффективности параллельной вставки
    #39926487
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
запилил свой вариант на OO API 4.0 с использование Batch API (по 100 записей)
id это просто номер записи в цикле, threadId номер потока. Заливалось 1 млн записей.
Процессор Inter Core i3-8100 3.6 GHz (4 физических ядра).
На каждый поток своё подключение по TCP на localhost.

1. Без индексов

Код: sql
1.
recreate table t(id bigint, threadId int)



Код: 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.
c:\Users\Denis\source\repos\threadtest\x64\Release>threadtest 1
Recreate table
Insert 1000000 with 1 threads
Insert time: 3848 ms
Count record after test: 1000000

c:\Users\Denis\source\repos\threadtest\x64\Release>threadtest 2
Recreate table
Insert 1000000 with 2 threads
Insert time: 3129 ms
Count record after test: 1000000

c:\Users\Denis\source\repos\threadtest\x64\Release>threadtest 4
Recreate table
Insert 1000000 with 4 threads
Insert time: 2632 ms
Count record after test: 1000000

c:\Users\Denis\source\repos\threadtest\x64\Release>threadtest 8
Recreate table
Insert 1000000 with 8 threads
Insert time: 2409 ms
Count record after test: 1000000

c:\Users\Denis\source\repos\threadtest\x64\Release>threadtest 16
Recreate table
Insert 1000000 with 16 threads
Insert time: 2400 ms
Count record after test: 1000000

c:\Users\Denis\source\repos\threadtest\x64\Release>threadtest 32
Recreate table
Insert 1000000 with 32 threads
Insert time: 2728 ms
Count record after test: 1000000

как видно распараллеливание вставки в таблицу без индексов не очень хорошее.

А вот если есть индексы картина кардинально меняется

Код: sql
1.
recreate table t(id bigint, threadId int, constraint pk_t primary key(id))



Код: 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.
c:\Users\Denis\source\repos\threadtest\x64\Release>threadtest 1
Recreate table
Insert 1000000 with 1 threads
Insert time: 22024 ms
Count record after test: 1000000

c:\Users\Denis\source\repos\threadtest\x64\Release>threadtest 2
Recreate table
Insert 1000000 with 2 threads
Insert time: 11534 ms
Count record after test: 1000000

c:\Users\Denis\source\repos\threadtest\x64\Release>threadtest 4
Recreate table
Insert 1000000 with 4 threads
Insert time: 5246 ms
Count record after test: 1000000

c:\Users\Denis\source\repos\threadtest\x64\Release>threadtest 8
Recreate table
Insert 1000000 with 8 threads
Insert time: 4833 ms
Count record after test: 1000000

c:\Users\Denis\source\repos\threadtest\x64\Release>threadtest 16
Recreate table
Insert 1000000 with 16 threads
Insert time: 4783 ms
Count record after test: 1000000

c:\Users\Denis\source\repos\threadtest\x64\Release>threadtest 32
Recreate table
Insert 1000000 with 32 threads
Insert time: 4737 ms
Count record after test: 1000000

Первоначально пробовал без использование batch API. Так вот там вставка в таблицу без индексов параллелилась прям на ура. Но потом я подумал и понял, что ускорение происходит за счёт преодоления оверхеда сетевого взаимодействия пусть даже по localhost.
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39926503
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис
Первоначально пробовал без использование batch API. Так вот там вставка в таблицу без индексов параллелилась прям на ура
Интересно. А результатов не сохранил ? Сравнить с Batch API, да и вообще.

Насчёт индексов - как распределены ключи ?
Ну и - как часто делал коммит, чему равен FW, какая дисковая, что менял в конфиге ?
Интересно ещё повторить с xnet и embedded.
И с более широкой таблицей.
Тесты с блобами и обычным\BatchAPI тоже весьма интересны :)

Я не сильно губу раскатал ? ;)
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39926518
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

архитектура-то какая?
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39926563
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

SS

hvladИнтересно. А результатов не сохранил ? Сравнить с Batch API, да и вообще.

там в табличке не было поля threadId. В одном потоке скорость была примерно в 10 раз хуже. Batch API рулит :)
Постараюсь вечером повторить на новой таблице. Да и вообще оставить в коде оба варианта с переключением через аргументы консоли.

hvladНасчёт индексов - как распределены ключи ?

В одном потоке id=1, 2, 3, 4, 5 ... 1000000
Если потоков несколько то я просто разбиваю на одинаковые диапазоны. Т.е. для 2 потоков 1...500000 и 500001...1000000
Но в саму таблицу они конечно попадают как random пошлёт. Из одного потока всегда нарастают, но потоки могут чередоваться как захотят.

FW=ON, обычный SATA диск

xnet и embedded попробую. Вообще я пока не делал тест настраиваемым. Надо бы входные параметры в аргументы командной строки перенести.

hvladИ с более широкой таблицей.
Тесты с блобами и обычным\BatchAPI тоже весьма интересны :)

а вот это настройками сделать сложнее, ибо я использую в коде макросы FB_MESSAGE. Т.е. придётся на каждый вариант таблицы свою процедуру заливки делать. С блобами там вообще в BatchAPI аж 4 варианта.

hvladЯ не сильно губу раскатал ?

нормально. Мне же самому интересно, иначе бы я тест делать не стал. :)
...
Рейтинг: 0 / 0
ANN: видео о мифе эффективности параллельной вставки
    #39927028
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Результаты тестов для разных протоколов.
Варианты с широкой таблицей и BLOB не тестировались.

Потоков/подключенийINETINET batchINET indexINET index batchXNETXNET batchXNET indexXNET index batchEmbEmb batchEmb index139.1353.56945.75512.91919.5663.55832.08413.3524.4653.42713.922220.6813.42431.9828.68811.3762.90228.6878.2333.7893.09611.093415.3202.70218.8615.8069.5592.60614.6665.2293.6802.9555.870814.8762.42018.0354.9458.2442.49312.7844.6492.8672.7476.1671615.0852.43317.8964.9178.2262.45211.4915.0373.0932.6115.743

статистика для 1 потока
Код: 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.
Analyzing database pages ...
T (191)
    Primary pointer page: 2044, Index root page: 2045
    Total formats: 1, used formats: 1
    Average record length: 13.93, total records: 1000000
    Average version length: 0.00, total versions: 0, max versions: 0
    Average fragment length: 0.00, total fragments: 0, max fragments: 0
    Average unpacked length: 20.00, compression ratio: 1.44
    Pointer pages: 5, data page slots: 6624
    Data pages: 6624, average fill: 57%
    Primary pages: 6624, secondary pages: 0, swept pages: 0
    Empty pages: 1, full pages: 6622
    Fill distribution:
         0 - 19% = 1
        20 - 39% = 1
        40 - 59% = 6622
        60 - 79% = 0
        80 - 99% = 0

    Index PK_T (0)
        Root page: 3272, depth: 3, leaf buckets: 1485, nodes: 1000000
        Average node length: 11.87, total dup: 0, max dup: 0
        Average key length: 9.04, compression ratio: 1.00
        Average prefix length: 2.96, average data length: 6.04
        Clustering factor: 6623, ratio: 0.01
        Fill distribution:
             0 - 19% = 1
            20 - 39% = 0
            40 - 59% = 24
            60 - 79% = 0
            80 - 99% = 1460


статистика для 4 потоков
Код: 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.
Analyzing database pages ...
T (192)
    Primary pointer page: 8338, Index root page: 8339
    Total formats: 1, used formats: 1
    Average record length: 13.93, total records: 1000000
    Average version length: 0.00, total versions: 0, max versions: 0
    Average fragment length: 0.00, total fragments: 0, max fragments: 0
    Average unpacked length: 20.00, compression ratio: 1.44
    Pointer pages: 5, data page slots: 6624
    Data pages: 6624, average fill: 57%
    Primary pages: 6624, secondary pages: 0, swept pages: 0
    Empty pages: 1, full pages: 6622
    Fill distribution:
         0 - 19% = 1
        20 - 39% = 1
        40 - 59% = 6622
        60 - 79% = 0
        80 - 99% = 0

    Index PK_T (0)
        Root page: 2369, depth: 3, leaf buckets: 2522, nodes: 1000000
        Average node length: 11.88, total dup: 0, max dup: 0
        Average key length: 9.04, compression ratio: 1.00
        Average prefix length: 2.96, average data length: 6.04
        Clustering factor: 21662, ratio: 0.02
        Fill distribution:
             0 - 19% = 1
            20 - 39% = 0
            40 - 59% = 2154
            60 - 79% = 1
            80 - 99% = 366


выводы:
1. Массовая заливка данных в таблицы по сетевым протоколам (INET,WNET,XNET) при использовании Batch API существенно быстрее.
2. Batch API с Embedded даёт небольшой прирост производительности, что ожидаемо.
3. Параллельная вставка в одну таблицу без индексов не даёт существенного выигрыша (при использовании сетевых протоколов может сложится впечатление, что операция хорошо масштабируется, однако на самом деле это преодоление оверхеда сетевых протоколов, что хорошо видно при использовании Batch API или Embedded )
4. Параллельная вставка в одну таблицу с индексами масштабируется существенно лучше. Однако учтите, что при параллельной вставке записи будут попадать в таблицу не в том порядке в котором они были изначально, а потому индексы станут менее компактными. Кроме того их фактор кластеризации будет существенно хуже.
...
Рейтинг: 0 / 0
91 сообщений из 91, показаны все 4 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / ANN: видео о мифе эффективности параллельной вставки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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