Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Требуется опытный наставник  [new]
sergey do
Member

Откуда:
Сообщений: 24
Доброго дня всем! У меня иммется немного свободного времени которое я хочу потратить на написание клиент серверного приложения . Необходима помощь профессионалов советами. Знания языков у меня кое какое имеется . Есть желающие помочь ? с меня пивас :)


1) сделал сервер для тестирования который постоянно доступен (поставил fb2,5 и oracle11gr2 ) (fb и oracle порты по умолчанию) (при необходимости вышлю все пароли и т.д)
2) 1 - е что планирую сделать сравнить субд в плане производительности . Для фб написал клиента для тестирования , для оракла делаю в данный момент(точно такого же) как будет готого , выложу всё . Пока вопросы не возникают но дальше я уверен появятся.
8 янв 13, 10:18    [13735229]     Ответить | Цитировать Сообщить модератору
 Re: Требуется опытный наставник  [new]
Yo.!
Guest
выкладывай сюда, наставника не обещаю, а обоср..ать подход тут всегда рады
делать "точно такого же" под оракл - плохая идея, каждая субд имеет свои особенности и навороты (особенности FB местами ни в какие ворота например не лезут). если код работает одинаково везде, значит он везде работает хренового.
8 янв 13, 11:39    [13735342]     Ответить | Цитировать Сообщить модератору
 Re: Требуется опытный наставник  [new]
sergey do
Member

Откуда:
Сообщений: 24
выкладываю клиента fb в архиве 2 файла http://files.mail.ru/US2QV8 (БОЛЬШАЯ ПРОСЬБА СУБД КОНЧ..ТЬ)
1- стартер
2- сам клиент
размещение должно быть d:\ais\
в базу уже добавлено 1000 пользователей . пробовал запускать с 6 компов в офисе в общей сложности 250-300 клиентов одновременно . время инсерта не превышало 11 сек(это когда подвисало , так в среднем до 1 сек) .

вот что делает клиент
while ok=false do
begin
Form1.Update;
t:=Now;
Form1.Update;
Application.ProcessMessages;
dm.tr1.StartTransaction;
Randomize;
dm.qu1.SQL.Clear;
dm.qu1.SQL.Add('insert into customer(firstname,lastname,address1,city,country,region,');
dm.qu1.SQL.Add('CREDITCARDTYPE,CREDITCARD,CREDITCARDEXPIRATION,username,passwd) values ');
dm.qu1.SQL.Add('(''serg'',''ivanov'',''anywhere'',''ttau'',''kz'',2,2,''12'',''324'',:user,''SERG1'')');
dm.qu1.ParamByName('user').Value:=ParamStr(1)+'___'+ParamStr(2)+IntToStr(RandomRange(1000000,999999999));
dm.qu1.ExecQuery;
dm.tr1.Commit;
Memo1.Lines.Add('время выполнения инсерт='+TimeToStr(Now-t));
Form1.Update;
Application.ProcessMessages;
//--------------------------------------------
t:=Now;
dm.tr2.StartTransaction;
dm.qu2.SQL.Clear;
dm.qu2.SQL.Add('select * from customer c where c.id=(select max(id) from customer)');
dm.qu2.ExecQuery;
dm.tr2.Commit;
Memo1.Lines.Add('время выполнения select='+TimeToStr(Now-t));
Form1.Update;
Application.ProcessMessages;


end;
8 янв 13, 13:01    [13735577]     Ответить | Цитировать Сообщить модератору
 Re: Требуется опытный наставник  [new]
sergey do
Member

Откуда:
Сообщений: 24
тестовый сервер подключен к сети туда\сюда ~ 800 кбит
8 янв 13, 13:10    [13735607]     Ответить | Цитировать Сообщить модератору
 Re: Требуется опытный наставник  [new]
Таблоид
Member

Откуда:
Сообщений: 9456
Блог
sergey do
while ok=false do
begin
Form1.Update;
t:=Now;
Form1.Update;
Application.ProcessMessages;
dm.tr1.StartTransaction;
<...>
dm.qu1.ExecQuery;
dm.tr1.Commit;
Memo1.Lines.Add('время выполнения инсерт='+TimeToStr(Now-t));
Form1.Update;
Application.ProcessMessages;
//--------------------------------------------
t:=Now;
<...>
dm.qu2.SQL.Add('select * from customer c where c.id=(select max(id) from customer)');
<...>
Memo1.Lines.Add('время выполнения select='+TimeToStr(Now-t));
<...>
end;
Правильно ли я понял, что:
1) на каждой итерации цикла вы стартуете транзакцию, в которой делаете только лишь 1 инсерт, и тут же её фиксируете;
2) на каждой итерации цикла вы делаете селект за "последним добавленным" покупателем, причём по полю customer.id у вас *нет* убывающего индекса ?
8 янв 13, 13:29    [13735670]     Ответить | Цитировать Сообщить модератору
 Re: Требуется опытный наставник  [new]
sergey do
Member

Откуда:
Сообщений: 24
все правильно , и так происходит на каждом клиенте .
8 янв 13, 13:33    [13735678]     Ответить | Цитировать Сообщить модератору
 Re: Требуется опытный наставник  [new]
sergey do
Member

Откуда:
Сообщений: 24
на данном этапе вопрос в том насколько быстрее будет оракл . либо будет достаточно фб.

вопрос :запуская клиетов с 6 машин(пусть по 50) у меня по сути быстродействие проверяется 6-ю клиентами т.к процессор последовательно выполняет команды для разных приложений или нет?
8 янв 13, 13:38    [13735691]     Ответить | Цитировать Сообщить модератору
 Re: Требуется опытный наставник  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54850

sergey do
все правильно , и так происходит на каждом клиенте .

А опытный наставник, значит, тебе нужен чтобы вслух читать букварь. Ню-ню... Так как
пишешь ты, писать нельзя. Ни для FB, ни для Oracle. Это код для настольного DBF-движка.

Posted via ActualForum NNTP Server 1.5

8 янв 13, 13:39    [13735696]     Ответить | Цитировать Сообщить модератору
 Re: Требуется опытный наставник  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54850

sergey do
на данном этапе вопрос в том насколько быстрее будет оракл

Намного быстрее будет Оракул, так что про ФБ забудь.

Posted via ActualForum NNTP Server 1.5

8 янв 13, 13:40    [13735699]     Ответить | Цитировать Сообщить модератору
 Re: Требуется опытный наставник  [new]
sergey do
Member

Откуда:
Сообщений: 24
Dimitry Sibiryakov, для того в каком напправлении и какой букварь читать , если бы все были такими умными ,вопросы бы никто тут не задавал. Я не навязываюсь.
8 янв 13, 13:43    [13735708]     Ответить | Цитировать Сообщить модератору
 Re: Требуется опытный наставник  [new]
sergey do
Member

Откуда:
Сообщений: 24
вопрос :запуская клиетов с 6 машин(пусть по 50) у меня по сути быстродействие проверяется 6-ю клиентами т.к процессор последовательно выполняет команды для разных приложений или нет?
8 янв 13, 13:44    [13735711]     Ответить | Цитировать Сообщить модератору
 Re: Требуется опытный наставник  [new]
Таблоид
Member

Откуда:
Сообщений: 9456
Блог
sergey do
все правильно , и так происходит на каждом клиенте .
Тогда этот тест мало связан с реальностью. Большинство транзакций (в OLTP-системах) модифицируют десятки или сотни строк, иногда - тысячи. Причём, не только добавляют, но и делают update / delete тоже. И не одной таблицы, а хотя бы трёх-четырёх. Я когда-то забавлялся этим. Пусть там и коряво всё, на таки посмотрите, пригодится м.б.

Далее. Чтобы быстро получить в ФБ значение последней записи (при поиске в порядке возрастания некоторого ключа - id, даты и проч.), надо создать по этому же ключу УБЫВАЮЩИЙ (descend) индекс. Иначе сравнение с другими СУБД, где для поиска в любом направлении (asc / desc) используется один индекс, будет некорректным.
8 янв 13, 13:46    [13735722]     Ответить | Цитировать Сообщить модератору
 Re: Требуется опытный наставник  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 11118
Тест кривой. Нафига на каждом шаге цикла очищать текст запроса, а затем добавлять его заново? Тем более, что запрос параметризирован. Да и про тразакции Таблоид уже сказал.
8 янв 13, 13:55    [13735757]     Ответить | Цитировать Сообщить модератору
 Re: Требуется опытный наставник  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54850

sergey do
для того в каком напправлении и какой букварь читать

Раз пишешь на дельфи, читай штатный Database Application Development Guide.

Posted via ActualForum NNTP Server 1.5

8 янв 13, 14:02    [13735791]     Ответить | Цитировать Сообщить модератору
 Re: Требуется опытный наставник  [new]
sergey do
Member

Откуда:
Сообщений: 24
ок тест усложню добавлю в теле одной транзакции инсерт апдей делит к разным таблицам.

вопрос :запуская клиетов с 6 машин(пусть по 50) у меня по сути быстродействие проверяется 6-ю клиентами т.к процессор последовательно выполняет команды для разных приложений или нет?
8 янв 13, 14:35    [13735920]     Ответить | Цитировать Сообщить модератору
 Re: Требуется опытный наставник  [new]
Таблоид
Member

Откуда:
Сообщений: 9456
Блог
sergey do
вопрос :запуская клиетов с 6 машин(пусть по 50) у меня по сути быстродействие проверяется 6-ю клиентами т.к процессор последовательно выполняет команды для разных приложений или нет?
Если на сервере несколько ядер, то ФБ в режиме Classic Server'a будет работать на каждом из них (там каждый коннект отображается в отдельный процесс с именем fb_inet_server; рассаживанием их по ядрам занимается операционка). В режиме SuperClassic'a коннекты (работающие в данный момент) отображаются на потоки внутри одного процесса (его имя в линухе: fb_smp_server; в виндузе - такое же как для CS, т.е. fb_inet_server). Этот процесс будет вертеться только на одном ядре, к сож-ю.
8 янв 13, 14:53    [13736054]     Ответить | Цитировать Сообщить модератору
 Re: Требуется опытный наставник  [new]
sergey do
Member

Откуда:
Сообщений: 24
Таблоид
sergey do
вопрос :запуская клиетов с 6 машин(пусть по 50) у меня по сути быстродействие проверяется 6-ю клиентами т.к процессор последовательно выполняет команды для разных приложений или нет?
Если на сервере несколько ядер, то ФБ в режиме Classic Server'a будет работать на каждом из них (там каждый коннект отображается в отдельный процесс с именем fb_inet_server; рассаживанием их по ядрам занимается операционка). В режиме SuperClassic'a коннекты (работающие в данный момент) отображаются на потоки внутри одного процесса (его имя в линухе: fb_smp_server; в виндузе - такое же как для CS, т.е. fb_inet_server). Этот процесс будет вертеться только на одном ядре, к сож-ю.


Таблойд , я не корректно задал вопрос , он немного проще. На стороне клиента я запускаю к примеру 50 экземпляров одного и того же приложения под разными для базы фб пользователями , приложения коннектится к базе и выполняют инсерт и селект.они будут выполняться паралельно или последовательно со стороны клиента (это тоже самое если бы я запустил по 1 экземпляру приложения на 50 разных машинах)?
8 янв 13, 16:05    [13736431]     Ответить | Цитировать Сообщить модератору
 Re: Требуется опытный наставник  [new]
Таблоид
Member

Откуда:
Сообщений: 9456
Блог
sergey do
они будут выполняться паралельно или последовательно со стороны клиента (это тоже самое если бы я запустил по 1 экземпляру приложения на 50 разных машинах)?
Если окно_1 вызвало некий "тяжелый селект", то весьма вероятно, что до того как оно получит все строки выборки, виндуза переключит процессор на окно_2. Ибо работает вытесняющая многозадачность.
И хотя процессор на вашей машине всего один, для сервера всё будет так, как будто его дёргают несколько разных коннектов. Пока он выполняет выборку для окна_1, придёт новый запрос от окна_2, затем от окна_3 и т.д.
Но у вас вместо "тяжелых селектов" - какие-то микроскопические нагрузки в виде одиночных инсертов.
8 янв 13, 16:37    [13736558]     Ответить | Цитировать Сообщить модератору
 Re: Требуется опытный наставник  [new]
hvlad
Member

Откуда:
Сообщений: 11578
Таблоид
В режиме SuperClassic'a .... Этот процесс будет вертеться только на одном ядре, к сож-ю.
Уверен ?
8 янв 13, 18:24    [13736992]     Ответить | Цитировать Сообщить модератору
 Re: Требуется опытный наставник  [new]
hvlad
Member

Откуда:
Сообщений: 11578
sergey do
На стороне клиента я запускаю к примеру 50 экземпляров одного и того же приложения под разными для базы фб пользователями , приложения коннектится к базе и выполняют инсерт и селект.они будут выполняться паралельно или последовательно со стороны клиента
Параллельно.
8 янв 13, 18:25    [13736996]     Ответить | Цитировать Сообщить модератору
 Re: Требуется опытный наставник  [new]
Таблоид
Member

Откуда:
Сообщений: 9456
Блог
hvlad
Таблоид
В режиме SuperClassic'a .... Этот процесс будет вертеться только на одном ядре, к сож-ю.
Уверен ?
Пардон, соврамши я. Действительно по разным ядрам раскладывается... :-)
+
Запустил известный тебе idx_test, 200 окон. Вижу в top'e вот это:
top - 22:52:54 up 12 days,  4:32,  2 users,  load average: 0.01, 0.01, 0.00
Tasks: 318 total, 1 running, 317 sleeping, 0 stopped, 0 zombie
Cpu0 : 20.9%us, 75.1%sy, 0.0%ni, 4.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu1 : 22.6%us, 72.6%sy, 0.0%ni, 4.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu2 : 18.0%us, 76.5%sy, 0.0%ni, 5.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu3 : 20.5%us, 73.0%sy, 0.0%ni, 6.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu4 : 20.4%us, 72.4%sy, 0.0%ni, 7.1%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu5 : 20.8%us, 71.3%sy, 0.0%ni, 7.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu6 : 20.3%us, 72.1%sy, 0.0%ni, 7.6%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu7 : 18.7%us, 72.8%sy, 0.0%ni, 8.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu8 : 19.0%us, 71.8%sy, 0.0%ni, 9.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu9 : 20.7%us, 69.5%sy, 0.0%ni, 9.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu10 : 19.0%us, 70.5%sy, 0.0%ni, 10.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu11 : 18.4%us, 70.3%sy, 0.0%ni, 11.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 16321244k total, 2157112k used, 14164132k free, 196804k buffers
Swap: 16383992k total, 0k used, 16383992k free, 753976k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2133 firebird 20 0 8220m 720m 139m S 1110.1 4.5 41:43.81 fb_smp_server

Ну, и разблюдовка по потокам и ядрам (см столб 'PSR' - это номер ядра, которое работает с соотв-щим LWP):
-bash-4.1$ ps -FLC fb_smp_server|head -5
UID PID PPID LWP C NLWP SZ RSS PSR STIME TTY TIME CMD
firebird 2133 2130 2133 0 149 2191267 913256 11 2012 ? 00:00:16 /opt/fb_252/bin/fb_smp_server
firebird 2133 2130 2134 0 149 2191267 913256 7 2012 ? 00:00:00 /opt/fb_252/bin/fb_smp_server
firebird 2133 2130 2135 0 149 2191267 913256 6 2012 ? 00:04:50 /opt/fb_252/bin/fb_smp_server
firebird 2133 2130 15081 10 149 2191267 913256 8 22:48 ? 00:01:36 /opt/fb_252/bin/fb_smp_server
firebird 2133 2130 15093 0 149 2191267 913256 10 22:48 ? 00:00:00 /opt/fb_252/bin/fb_smp_server
8 янв 13, 19:12    [13737225]     Ответить | Цитировать Сообщить модератору
 Re: Требуется опытный наставник  [new]
Таблоид
Member

Откуда:
Сообщений: 9456
Блог
Yo.!
особенности FB местами ни в какие ворота например не лезут

Кстати. Товарищ Yo,!

Помнишь вот эту: 13297731 - дискуссию про перечитывания (рестарты) ораклом записей, которые поменялись с момента начала запроса, идущего с TIL=RC ? Вот твои слова оттуда:
Yo.!
firebird запись в конце проапдейтит, а ту что в начале нет, хотя такого состояния в БД ни в один момент времени не было.

А чего тогда Оракл не реализовал такой же подход для случая:
select field_01, field_02, some_function(some_arg)
from huge_table t
where ...
- причем pl/sql-функция some_function() возвращает некие значения, основываясь на данных huge_table.
Я так понимаю, что если некий конкурирующий коннект_2 возьмёт да и затолкает в huge_table новые данные, закоммитит их, то когда первый запрос доберётся до них, то ПОКАЖЕТ их - правильно ? Дальше он будет молотить до упора, но тут еще один коннект_3 возьмёт да и грохнет вставленные коннектом_2 записи. И получится, что коннект_1 выдаст в итоге неконсистентные данные - так или нет ?

ЗЫ.
Сведения почерпнуты у дяди Тома:
+
автор
let’s suppose you are executing a simple query such as select a, b, c, f(x) from t, where a, b, c, and x are columns of a table t and f is a PL/SQL function you’ve written that contains its own SQL statements. And you are seeing what appear to be inconsistent results—that is, the data returned for the first row is inconsistent with the data returned for the last row, something that sounds impossible in Oracle Database. Well, the rules of read consistency have not been violated here: every query executed in this case will be read-consistent. However, each query executed will be read-consistent with respect to itself by default. If you use SQL to execute a function that in turn runs its own SQL, each query executed is by default consistent with itself but not with the original driving SQL.
и вот в этом материальчике. Там в качестве обходного манёрва рекомендуется то же самое: повышать TIL до serializable (или же стартовать запрос в RO-транзакции, но это далеко не всегда возможно).

Ну так вот, вопрос у меня: чего им помешало сделать read consistency в этом случае ?
8 янв 13, 21:55    [13737991]     Ответить | Цитировать Сообщить модератору
 Re: Требуется опытный наставник  [new]
Yo.!
Guest
Таблоид,

завтра попробую потестировать, до сего дня был уверен, что данные берутся на момент старта запроса, не важно есть там функции или нет. было бы странно если олракл сдвигал бы SCN для каждого вызова функции, на мой взгляд для этого нужно дополнительные старания.
9 янв 13, 00:04    [13738508]     Ответить | Цитировать Сообщить модератору
 Re: Требуется опытный наставник  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34709
sergey do
2) 1 - е что планирую сделать сравнить субд в плане производительности . Для фб написал клиента для тестирования , для оракла делаю в данный момент(точно такого же) как будет готого , выложу всё . Пока вопросы не возникают но дальше я уверен появятся.


Как бы ничего не зная и не умея что-то пытаться тестировать -- это очень смелое желание.
Ну, протестируешь, а дальше что ?
9 янв 13, 02:55    [13738970]     Ответить | Цитировать Сообщить модератору
 Re: Требуется опытный наставник  [new]
sergey do
Member

Откуда:
Сообщений: 24
MasterZiv
sergey do
2) 1 - е что планирую сделать сравнить субд в плане производительности . Для фб написал клиента для тестирования , для оракла делаю в данный момент(точно такого же) как будет готого , выложу всё . Пока вопросы не возникают но дальше я уверен появятся.


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


я же говорю , время немного имеется(играть на работе надоело!!) , читать умею , думаю во всем можно разобраться до требуемого уровня , следущий этап я думаю будет связан с безопасностью(обзор и выбор решения), а не знаю и не умею ничего потому что работаю не в айти сфере .
9 янв 13, 21:08    [13743769]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Сравнение СУБД Ответить