Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Для профи > Оптимизация работы с таблицей sessions в ip.board


Автор: Pokoinik 2.11.2012, 10:24
IPB хранит часть сессионной информации в memcached, и часть в такой таблице
Код

CREATE TABLE `sessions` (
  `id` VARCHAR(60) NOT NULL DEFAULT '0',
  `member_name` VARCHAR(255) DEFAULT NULL,
  `seo_name` VARCHAR(255) NOT NULL DEFAULT '',
  `member_id` INT(11) NOT NULL DEFAULT '0',
  `ip_address` VARCHAR(46) DEFAULT NULL,
  `browser` VARCHAR(200) NOT NULL DEFAULT '',
  `running_time` INT(10) DEFAULT NULL,
  `login_type` TINYINT(1) DEFAULT '0',
  `member_group` SMALLINT(3) DEFAULT NULL,
  `in_error` TINYINT(1) NOT NULL DEFAULT '0',
  `location_1_type` VARCHAR(255) NOT NULL,
  `location_1_id` INT(10) NOT NULL DEFAULT '0',
  `location_2_type` VARCHAR(255) NOT NULL,
  `location_2_id` INT(10) NOT NULL DEFAULT '0',
  `location_3_type` VARCHAR(255) NOT NULL,
  `location_3_id` INT(10) NOT NULL DEFAULT '0',
  `current_appcomponent` VARCHAR(100) NOT NULL DEFAULT '',
  `current_module` VARCHAR(100) NOT NULL DEFAULT '',
  `current_section` VARCHAR(100) NOT NULL DEFAULT '',
  `uagent_key` VARCHAR(200) NOT NULL DEFAULT '',
  `uagent_version` VARCHAR(100) NOT NULL DEFAULT '',
  `uagent_type` VARCHAR(200) NOT NULL DEFAULT '',
  `uagent_bypass` INT(1) NOT NULL DEFAULT '0',
  `search_thread_id` INT(11) NOT NULL DEFAULT '0',
  `search_thread_time` INT(10) NOT NULL DEFAULT '0',
  `was_failed_login_attempts` INT(11) NOT NULL DEFAULT '0',
  `session_msg_id` INT(10) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `location1` (`location_1_type`,`location_1_id`),
  KEY `location2` (`location_2_type`,`location_2_id`),
  KEY `location3` (`location_3_type`,`location_3_id`),
  KEY `running_time` (`running_time`),
  KEY `member_id` (`member_id`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8


Эта инфа используется для статистических фич (форум читают и т.п.)
Проблема в том, что одномоментно на форуме находятся ~10k пользователей (всего активных сессий ~100k)
и выборки работают несколько медленно. 
Кешировать выборки нельзя - инфа должна быть актуальной. Возможно стоит вынести это из mysql, но куда? Key-Value storage совсем не подходят.  smile 

Автор: MoLeX 2.11.2012, 10:53
Цитата

ENGINE=MEMORY


Цитата

Проблема в том, что одномоментно на форуме находятся ~10k пользователей (всего активных сессий ~100k)
и выборки работают несколько медленно. 


оперативная память то хоть есть? а то похоже что подкачка используется

Автор: Pokoinik 2.11.2012, 11:34
128Gb ram on db server
память есть. smile

Автор: Sanchezzz 4.11.2012, 11:48
утилиту http://mysqltuner.pl/mysqltuner.pl  пробовали запускать и следовать советам ?  мне кажется вы упираетесь в настройку
http://habrahabr.ru/post/108418/   про оптимизацию много постов уже накатано на хабре которые можно почитать. Обязательно читаем комментарии к статьям. и не забываем бекап конфигов делать)

http://habrahabr.ru/post/146179/

Автор: Pokoinik 5.11.2012, 12:49
Оптимизация конфигов очень часто упирается в архитектурные решения приложения. 
в данном случае этого замечательного форума IPB

решили разделить сессионную информацию и статистику..  под последнюю написать отдельный аппликейшн.. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)