Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Help: производительность InnoDB (Dinky) 27/10/2004 - 06:13:02
      Re: Help: производительность InnoDB (walrus) 27/10/2004 - 13:45:31
      Re: Help: производительность InnoDB (Dinky) 27/10/2004 - 16:22:28
      Re: Help: производительность InnoDB (walrus) 27/10/2004 - 18:45:00
      Re: Help: производительность InnoDB (Dinky) 27/10/2004 - 19:33:58
      Re: Во-блин, во-блин, во-блин,... (Dinky) 27/10/2004 - 20:16:37
      Re: А я не понял ... (Marat_L) 28/10/2004 - 08:23:22
      Re: А я не понял ... (Dinky) 28/10/2004 - 20:59:26

> Original message text:
> From: Dinky - 27/10/2004 - 06:13:02
> Subject:Help: производительность InnoDB
> -----------------
> загибаются у наших сессии, решил им помочь, перенести на innodb, потестировал - что-то не круто, имхо, или я что-то не понимаю :) ok, по-порядку:
> ----- таблица ------------------
> CREATE TABLE `session` (
> `session_id` varchar(32) NOT NULL default '',
> `expires` int(11) default NULL,
> `data` mediumtext,
> PRIMARY KEY (`session_id`),
> KEY `expires` (`expires`)
> ) TYPE=InnoDB
> --------------------------------
> сгенерил 10K записей, размер данных ~200MB
> ------ /etc/my.cnf -------------
> innodb_flush_log_at_trx_commit=0
> #innodb_lock_wait_timeout=50
> innodb_buffer_pool_size=500M
> innodb_additional_mem_pool_size=20M
> innodb_log_file_size=125M
> innodb_log_buffer_size=8M
> innodb_data_file_path = ibdata1:250M:autoextend
> --------------------------------
> сделал простой скриптик
> ---------
> $rs = fopen("/dev/random","r") or die("Can't open /dev/random :(\n");
> echo time()." updating sessions...\n"; flush();
> for($i=0;$i<100;$i++) {
> if($i%10 == 0) echo " ".$i." ".time()."\n"; flush();
> $r_id = rand(1,10000);
> $res = mysql_db_query("session_innodb","SELECT data FROM session WHERE session_id=".$r_id);
> mysql_free_result($res);
> $query = "UPDATE session SET data='".mysql_escape_string(fread($rs,8096*rand(1,4))).
> "' WHERE session_id=".$r_id;
> mysql_db_query("session_innodb",$query) or die(mysql_error());
> }
> echo time()." done\n";
> fclose($rs);
> ---------
> запустил, скорость - 2-3 секунды на 10 операций select/update
> запустил 8 одновременно, скорость - 25 секунд на 10 операций select/update, т.е. апдейты выполняются по 2 секунды, а некоторые и по 3, что мягко говоря не удовлетворяет требованию "<=1sec"
> Вопросы:
> - что может тормозить (где смотреть) ?
> - что можно подкрутить (аналогично) ?
>
> Спасибо
> --
> Dmitry
>
>


From: walrus - 27/10/2004 - 13:45:31
Subject:Help: производительность InnoDB
-----------------
Что то не то у вас товарищ.
Я попробовал воспроизвести но на перле. В результате получил примерно

updating sessions...
..........Seconds for 100 select/updates: 0.825285

Вот что я делал:
заливка

#!/usr/bin/perl

use DBI;

$dbh = DBI->connect("dbi:mysql:database=test","root","")
or die 'cannot connect'.$DBI::errstr;

$dbh->do ("drop table if exists session") or die $DBI::errstr;
$dbh->do(qq{
create table session (
session_id varchar(32) not null default ' ',
expires int(11),
data mediumtext,
primary key(session_id),
key (expires)
) engine=innodb;
}) or die $DBI::errstr;

for $i (1 .. 100_000) {
$dbh->do("insert into session values ($i,$i,'Dobrodeteliu ukrashaites')") or di
e $DBI::errstr;
}

тестирование:
#!/use/bin/perl
use DBI;
use Time::HiRes qw(gettimeofday tv_interval);

$dbh = DBI->connect("dbi:mysql:database=test","root","")
or die 'cannot connect'.$DBI::errstr;

print " updating sessions...\n";
$starttime=[gettimeofday];

for $i ( 0 .. 99) {
print "." if($i % 10 == 0);

$r_id = rand(10000);

$res = $dbh->selectall_arrayref("SELECT data FROM session WHERE session_id='$r_i
d'");

$thedata = gen_rand_str(8096);
$dbh->do("UPDATE session SET data='$thedata' WHERE session_id='$r_id'") or
die $DBI::errstr;
}
$elapsed = tv_interval($starttime);
print "Seconds for 100 select/updates: $elapsed \n";


sub gen_rand_str {
my $len = shift;
$res = ' 'x$len;
for (1..$len) {
substr($res,$_) = chr( rand(26) +ord('a'));
}
return $res;
}

конфиг:
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-locking
server-id = 1
# Uncomment the following if you are using InnoDB tables
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 200M
innodb_log_file_size = 50M

Компьютер P4 2.4GHz 512M ram slackware 10



[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
18112



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |