السلام عليكم

عندي موقع علية حركة كبيرة للغاية . وجدول كبير 9 ملايين سجل يستخدم

insert - select - join

ولذلك قسمت الجدول لكل مستخدم جدولة الخاص .

اللود على السيرفر 10 الى 15 ... وال Mysql تاخذ 90% من اللود.

ال Mysql موجودة على SSD هارد دسك .

الاعادادات كما يلي

my.cnf

[mysqld]

innodb_file_per_table=1
max_allowed_packet=268435456
open_files_limit=50000
default-storage-engine=MyISAM
myisam_sort_buffer_size=256M
table_open_cache = 600
thread_cache_size = 4
query_cache_type = 1
query_cache_limit = 256K
query_cache_min_res_unit = 2k
query_cache_size = 80M


join_buffer_size = 256k
tmp_table_size = 20M
max_connections = 600

slow-query-log = 1
slow-query-log-file = /output/mysql-slow.log
long_query_time = 1
datadir=/disk3/mysql

Server Ram

             total       used       free     shared    buffers     cached
Mem:           62G        61G       1.5G       1.8G       2.0G        53G
-/+ buffers/cache:       5.6G        57G
Swap:         1.9G       230M       1.7G

CPU

model name      : Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz × 2
cpu MHz         : 2000.022
cache size      : 15360 KB

الجدول الذي قمت بتقسيمه لكل مستخدم جدولة الخاص... طبعا قمت بإنشاء قاعدة بيانات منفصلة مخصصة لهذه الجداول... الان عندي 2300 جدول. الفكرة استوحيتها من الورد برس الخاصة بالمجتمع .. فكل مستخدم تعطيه جداولة الخاصة..

CREATE TABLE `status_userid` (
             `id` int(10) NOT NULL AUTO_INCREMENT,
             `md5id` char(32) COLLATE utf8_swedish_ci NOT NULL DEFAULT '0',
             `ptype` char(1) COLLATE utf8_swedish_ci NOT NULL DEFAULT '0',
             `media_id` varchar(50) COLLATE utf8_swedish_ci NOT NULL DEFAULT '0',
             `media_url` varchar(100) COLLATE utf8_swedish_ci NOT NULL,
             `media_photo` varchar(255) COLLATE utf8_swedish_ci NOT NULL,
             `user_id` varchar(50) COLLATE utf8_swedish_ci NOT NULL DEFAULT '0',
             `user_name` varchar(100) COLLATE utf8_swedish_ci NOT NULL DEFAULT '0',
             `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
             `reason` text COLLATE utf8_swedish_ci,
             PRIMARY KEY (`id`),
             KEY `md5id_mediaid` (`md5id`,`media_id`),
             KEY `user_id_md5id` (`user_id`,`md5id`)
            ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci

from mysql.slow.log

Count: 1165  Time=11.17s (13008s)  Lock=0.00s (0s)  Rows=548.3 (638790), myinstar_ranker[myinstar_ranker]@localhost
  SELECT
  s1.id as order_by,
  s1.media_id,
  s1.media_photo,
  s1.user_id,
  s1.user_name,
  s1.date
  FROM `status_427` s1
  LEFT JOIN
  (SELECT md5id, user_id, ptype FROM `status_427`  WHERE md5id = 'S') s2
  ON
  s1.user_id = s2.user_id AND s2.ptype = 'S'
  WHERE
  s1.md5id = 'S'
  AND s2.md5id IS NULL
  AND s1.date  < NOW() - INTERVAL N DAY
  AND s1.ptype = 'S'

Count: 2247  Time=8.09s (18172s)  Lock=0.00s (1s)  Rows=1.0 (2247), myinstar_ranker[myinstar_ranker]@localhost
  SELECT
  count(N) as counter
  FROM `status_421` s1
  LEFT JOIN
  (SELECT md5id, user_id, ptype FROM `status_421`  WHERE md5id = 'S') s2
  ON
  s1.user_id = s2.user_id AND s2.ptype = 'S'
  WHERE
  s1.md5id = 'S'
  AND s2.md5id IS NULL
  AND s1.date  < NOW() - INTERVAL N DAY
  AND s1.ptype = 'S'

Server top

Tasks: 781 total,   5 running, 775 sleeping,   1 stopped,   0 zombie
Cpu(s): 41.1%us, 10.1%sy,  0.0%ni, 48.5%id,  0.0%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:  65784692k total, 64190512k used,  1594180k free,  2141220k buffers
Swap:  1999868k total,   236436k used,  1763432k free, 56162120k cached

    PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 459105 mysql     20   0 12.4g 286m 6588 S 564.2  0.4 137:35.08 mysqld

اخبرت ان inoDb حساس جدا ويعطل بسرعة لا بل اكثر انه يترك سجل لوغ كبير للغاية

لست خبيرا بقواعد البيانات . اتمنى المساعدة والنصح كيف يمكن ان اقوم بتحسين الامر .

وما هية الاعدادات المناسبة ...

جزاكم الله خيرا وبارك صيامكم