• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
کندی اجرای کوئری (اختلاف دو کوئری مشابه 20 ثانیه!)
#1
يه سرور در نظر بگيريد با يک گيگ رم و سي پي يو اين
کد:
microcode: 0x710
cpu MHz: 3599.999
cache size: 10240 KB
physical id: 0
siblings: 1
core id: 0
cpu cores: 1
apicid: 0
initial apicid: 0
fpu: yes
fpu_exception: yes
cpuid level: 13
wp: yes
flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxs
r sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc
aperfmperf eagerfpu pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 popcnt aes xsave avx hypervisor lahf_lm ida arat
epb xsaveopt pln pts dtherm
bogomips: 7199.99
clflush size: 64
cache_alignment: 64
address sizes: 40 bits physical, 48 bits virtual
power management:

اينم ميزان مصرف
کد:
CPU[#*                                      1.3%]     Tasks: 72, 28 thr; 2 running
  Mem[|||||||||||||||||||#***************407/994MB]     Load average: 0.29 0.20 0.24
  Swp[||                                 49/1905MB]     Uptime: 6 days, 05:30:20

سرور اوبونتو 14.04
ديتابيس mariadb 5.5
وبسرور nginx

يه ديتابيس داريم که يه جدول items داره با حدود 6 ميليون رکورد
به شرح زير
[عکس: 3308614138360181858_1.png]
innoDB هم هست

حالا من ميخوام بدونم چرا کوئري
select count(id) _all , count(distinct ip) as _unique from items where site_id=56 and date='1393-07-28';
با کوئري
select count(id) _all , count(distinct ip) as _unique from items where date='1393-07-28';
که فقط توي يه where site_id=56
فرق دارن تايمشون چيزي حدود 20 ثانيه اختلاف داره
site_id هم int 10 هست ايندکس هم شده !!!

کد:
MariaDB [webshomar]> select count(id) _all , count(distinct ip) as _unique from items where site_id=56 and date='1393-07-28';
+------+---------+
| _all | _unique |
+------+---------+
| 6879 |    1455 |
+------+---------+
1 row in set (34.81 sec)

MariaDB [webshomar]> select count(id) _all , count(distinct ip) as _unique from items where  date='1393-07-28';
+-------+---------+
| _all  | _unique |
+-------+---------+
| 15973 |    5137 |
+-------+---------+
1 row in set (11.12 sec)


MariaDB [webshomar]> select count(id) _all  from items where site_id=56 and date='1393-07-28' ;
+------+
| _all |
+------+
| 6879 |
+------+
1 row in set (35.46 sec)

MariaDB [webshomar]> select count(id) _all  from items where  date='1393-07-28' ;
+-------+
| _all  |
+-------+
| 15983 |
+-------+
1 row in set (10.37 sec)

فايل کانفيگ mysql server هم خدمت شما
کد:
key_buffer= 256M
max_allowed_packet= 16M
thread_stack= 192K
thread_cache_size       = 256
max_connections        = 300
table_cache            = 512
thread_concurrency     = 4
query_cache_limit= 4M
query_cache_size        = 64M
  پاسخ
تشکر شده توسط :
#2
اکسپلینشون رو هم میزاشتی بهتر میشد فهمید چی به چیه
  پاسخ
تشکر شده توسط :
#3
site_id و date رو یک ایندکس مشترک براشون ایجاد کن نتیجه رو بگو
  پاسخ
تشکر شده توسط :
#4
سلام یه تست کردم داده هایی که درگیر نمیشدن رو حذف کردم و تعداد سطرهارو کردم یک میلیون رکورد (فقط اونایی که درگیر میشن)
سرعت رسید به 2 و 3 ثانیه .
فکر نمیکردم حجم دیتابیس انقدر تاثیر داشته باشه .
به نظرت postgresql بهتر نیست ؟

یا قمر بنی هاشم داش وجید چه کردی Heart
کد:
MariaDB [webshomar]> select count(id) _all , count(distinct ip) as _unique from items where site_id=5
6 and date='1393-07-28';
+------+---------+
| _all | _unique |
+------+---------+
| 6886 |    1459 |
+------+---------+
1 row in set (0.38 sec)

MariaDB [webshomar]> select count(id) _all , count(distinct ip) as _unique from items where  date='13
93-07-28';
+-------+---------+
| _all  | _unique |
+-------+---------+
| 16306 |    5239 |
  پاسخ
تشکر شده توسط :
#5
چی شد؟
pgsql برای بهینه سازی خیلی بهتره.
  پاسخ
تشکر شده توسط : Reza
#6
نقل قول: چی شد؟
کد:
1 row in set (0.38 sec)
Big Grin
عین موشک جواب میده

والا حقیقتش اوایل با postgresql نوشته بودم اما یه pt-get upgrade انجام دادم که کل سرورو به هم ریخت بعد که رستارت کردم postgresql به هیچ سراطی مستقیم نشد دیگه سریع سویچ کردم روی mysql حالام که رکوردها میلیونی شده خوردم به خنسی (خنصی!) Big Grin
بک آپ گرفتم چیزی حدود یک گیگ شد خواستم بریزم روی postgresql که هر کاری کردم با ابزارها تغییر دادم نشد که نشد

postgresql رو من روی چیزی حدود بیست هزار رکورد تست کردم قبلا خیلی سریع بود حتی اگه ساب کوئری و group by داشتم توی کوئری اصلا عین خیالش نبود
mysql فقط به درد دستورات ساده میخوره یه زده پیچیده بشه سرعت افتضاح میاد پایین

یه سرور دیگه گرفتم نمیدونم حالا شاید انتقال دادم دیتابیس رو باید ببینم چیزی پیدا میکنم بک آپ mysql رو تبدیل کنه به pgsql یا نه .
در هر حال ممنون
  پاسخ
تشکر شده توسط :
#7
(۱۳۹۳ آبان ۰۱, ۱۲:۲۸ ب.ظ)Reza نوشته:
نقل قول: چی شد؟
کد:
1 row in set (0.38 sec)
Big Grin
عین موشک جواب میده

والا حقیقتش اوایل با postgresql نوشته بودم اما یه pt-get upgrade انجام دادم که کل سرورو به هم ریخت بعد که رستارت کردم postgresql به هیچ سراطی مستقیم نشد دیگه سریع سویچ کردم روی mysql حالام که رکوردها میلیونی شده خوردم به خنسی (خنصی!) Big Grin
بک آپ گرفتم چیزی حدود یک گیگ شد خواستم بریزم روی postgresql که هر کاری کردم با ابزارها تغییر دادم نشد که نشد

postgresql رو من روی چیزی حدود بیست هزار رکورد تست کردم قبلا خیلی سریع بود حتی اگه ساب کوئری و group by داشتم توی کوئری اصلا عین خیالش نبود
mysql فقط به درد دستورات ساده میخوره یه زده پیچیده بشه سرعت افتضاح میاد پایین

یه سرور دیگه گرفتم نمیدونم حالا شاید انتقال دادم دیتابیس رو باید ببینم چیزی پیدا میکنم بک آپ mysql رو تبدیل کنه به pgsql یا نه .
در هر حال ممنون

استراکچر رو که تبدیل کردی. بقیه کانورت رو خودت با php هم می تونی بنویسی. برای postgre هم بهتره از ریپوزیتوری هاش نصب کنی. آپگیرد هم از همون بزنی. من تا به حال باهاش به مشکلی نخوردم.
البته بی صبرانه منتظر نسخه 9.4 هستم
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان