আমরা একটি এম 1 এক্সএলগার মাইএসকিউএল আরডিএস সার্ভার চালাচ্ছি এবং উচ্চ সিপিইউ ব্যবহারের সাথে কিছু সমস্যা রয়েছে। আমরা বেশ কয়েক সপ্তাহ আগে সিপিইউর ব্যবহারের একটি বড় উদাহরণে 100% পৌঁছে দিয়ে কিছু সমস্যা করেছি। যখন আমরা আকারটিকে বাড়িয়ে তুলি যখন কিছু সময়ের জন্য স্থিতিশীল হয়ে যায় তবে সিপিইউ ব্যবহার ধীরে ধীরে আবার ক্রপ আপ হয়।
গত সপ্তাহ বা তার জন্য সিপিইউ ব্যবহার 90 এর দশকের উচ্চতর অবস্থানে ছিল, গতকাল ধারাবাহিকভাবে 100% বা সেখানে পৌঁছেছিল, যা আমাদের উত্পাদন সাইটকে থামিয়ে দেয়। ডিবি সার্ভারটি রিবুট করার পরে, কয়েক ঘন্টাের মধ্যে সিপিইউ ব্যবহার একই স্তরে ফিরে যায়।
আমি মাইএসকিএল সার্ভারে শো প্রসেসলিস্টটি চালিয়েছি এবং মাইএসকিউএল প্রশাসকের মাধ্যমে এটি পর্যবেক্ষণ করেছি। বিশেষত দীর্ঘ-চলমান কোয়েরি বা উচ্চতর কোয়েরি নেই বলে মনে হচ্ছে। দীর্ঘ সময় ধরে ঘুমের রাজ্যে বেশ কয়েকটি প্রক্রিয়া রয়েছে ... এগুলি হল আমাদের মূল অ্যাপের বাইরে থাকা বিচ্ছিন্ন কর্মী ডেমন যা ডাটাবেসের সাথে যোগাযোগ করে। সার্ভারের নামগুলি পরিবর্তিত হয়ে সেগুলি কী সেগুলির একটি বিবরণ দেওয়ার জন্য আমি নীচের প্রসেসলিস্ট আউটপুটে অনুলিপি করেছি:
+------+----------+---------------------------------------------------+--------------+---------+-------+--------------+----------------------------------------------------------------------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+------+----------+---------------------------------------------------+--------------+---------+-------+--------------+----------------------------------------------------------------------------------------+
| 13 | rdsadmin | localhost:43513 | mysql | Sleep | 14 | | NULL |
| 15 | proddbuser | app-server-1.eu-west-1.compute.internal:36460 | proddb | Sleep | 46 | | NULL |
| 451 | proddbuser | app-server-1.eu-west-1.compute.internal:55512 | proddb | Sleep | 29 | | NULL |
| 912 | proddbuser | app-server-1.eu-west-1.compute.internal:45171 | proddb | Sleep | 13 | | NULL |
| 941 | proddbuser | app-server-1.eu-west-1.compute.internal:47353 | proddb | Sleep | 53 | | NULL |
| 951 | proddbuser | app-server-1.eu-west-1.compute.internal:48014 | proddb | Sleep | 37 | | NULL |
| 1009 | proddbuser | app-server-1.eu-west-1.compute.internal:51787 | proddb | Sleep | 36 | | NULL |
| 1041 | proddbuser | app-server-1.eu-west-1.compute.internal:53777 | proddb | Sleep | 14 | | NULL |
| 1572 | proddbuser | app-server-1.eu-west-1.compute.internal:42989 | proddb | Sleep | 3 | | NULL |
| 1592 | proddbuser | app-server-1.eu-west-1.compute.internal:43279 | proddb | Sleep | 162 | | NULL |
| 2909 | proddbuser | app-server-1.eu-west-1.compute.internal:37768 | proddb | Sleep | 35 | | NULL |
| 3028 | proddbuser | app-server-1.eu-west-1.compute.internal:42568 | proddb | Sleep | 5 | | NULL |
| 3119 | proddbuser | app-server-1.eu-west-1.compute.internal:46913 | proddb | Sleep | 76 | | NULL |
| 3189 | proddbuser | app-server-1.eu-west-1.compute.internal:51466 | proddb | Sleep | 5 | | NULL |
| 3216 | proddbuser | app-server-2.eu-west-1.compute.internal:44097 | proddb | Sleep | 14552 | | NULL |
| 3218 | proddbuser | app-server-2.eu-west-1.compute.internal:44099 | proddb | Sleep | 14552 | | NULL |
| 3219 | proddbuser | app-server-2.eu-west-1.compute.internal:44107 | proddb | Sleep | 44 | | NULL |
| 3220 | proddbuser | app-server-2.eu-west-1.compute.internal:44113 | proddb | Sleep | 26 | | NULL |
| 3223 | proddbuser | app-server-2.eu-west-1.compute.internal:44184 | proddb | Sleep | 50 | | NULL |
| 3224 | proddbuser | app-server-2.eu-west-1.compute.internal:44187 | proddb | Sleep | 1 | | NULL |
| 3226 | proddbuser | app-server-2.eu-west-1.compute.internal:44208 | proddb | Sleep | 33 | | NULL |
| 3229 | proddbuser | app-server-2.eu-west-1.compute.internal:44250 | proddb | Sleep | 14 | | NULL |
| 3232 | proddbuser | app-server-2.eu-west-1.compute.internal:44279 | proddb | Sleep | 26 | | NULL |
| 3233 | proddbuser | app-server-2.eu-west-1.compute.internal:44297 | proddb | Sleep | 31 | | NULL |
| 3237 | proddbuser | app-server-2.eu-west-1.compute.internal:44334 | proddb | Sleep | 27 | | NULL |
| 3239 | proddbuser | app-server-2.eu-west-1.compute.internal:44338 | proddb | Sleep | 11 | | NULL |
| 3241 | proddbuser | app-server-2.eu-west-1.compute.internal:44356 | proddb | Sleep | 26 | | NULL |
| 3260 | proddbuser | app-server-2.eu-west-1.compute.internal:44619 | proddb | Sleep | 8 | | NULL |
| 3337 | proddbuser | utility-server-1.eu-west-1.compute.internal:45193 | proddb | Query | 0 | Sending data | SELECT `mytable`.* FROM `mytable` WHERE `mytable`.`foreign_key` = 309416 LIMIT 1 |
| 3419 | proddbuser | utility-server-1.eu-west-1.compute.internal:46136 | proddb | Query | 0 | Sending data | SELECT `mytable`.* FROM `mytable` WHERE `mytable`.`foreign_key` = 284530 LIMIT 1 |
| 3463 | proddbuser | app-server-1.eu-west-1.compute.internal:59619 | proddb | Sleep | 9406 | | NULL |
| 3504 | proddbuser | utility-server-1.eu-west-1.compute.internal:47063 | proddb | Query | 0 | Sending data | SELECT `mytable`.* FROM `mytable` WHERE `mytable`.`foreign_key` = 260571 LIMIT 1 |
| 3577 | proddbuser | app-server-1.eu-west-1.compute.internal:34394 | proddb | Sleep | 6734 | | NULL |
| 3585 | proddbuser | utility-server-1.eu-west-1.compute.internal:47990 | proddb | Query | 0 | Sending data | SELECT `mytable`.* FROM `mytable` WHERE `mytable`.`foreign_key` = 231273 LIMIT 1 |
| 3664 | proddbuser | utility-server-1.eu-west-1.compute.internal:48909 | proddb | Query | 0 | Sending data | SELECT `mytable`.* FROM `mytable` WHERE `mytable`.`foreign_key` = 201525 LIMIT 1 |
| 3716 | proddbuser | app-server-2.eu-west-1.compute.internal:56301 | proddb | Sleep | 27 | | NULL |
| 3748 | proddbuser | utility-server-1.eu-west-1.compute.internal:49850 | proddb | Query | 0 | Sending data | SELECT `mytable`.* FROM `mytable` WHERE `mytable`.`foreign_key` = 167839 LIMIT 1 |
| 3771 | proddbuser | my-pc:30101 | NULL | Query | 0 | NULL | show processlist |
| 3831 | proddbuser | utility-server-1.eu-west-1.compute.internal:50785 | proddb | Query | 0 | Sending data | SELECT `mytable`.* FROM `mytable` WHERE `mytable`.`foreign_key` = 123228 LIMIT 1 |
+------+----------+---------------------------------------------------+--------------+---------+-------+--------------+----------------------------------------------------------------------------------------+
আমার আরও বলা উচিত যে এই সময়কালে সাইটে ট্রাফিক অত্যন্ত কম থাকে, সাধারণ পিক আওয়ারের তুলনায়, আমরা শিখর সময়ে দেখা প্রায় 10% বোঝা।
আমাদের কাছে নতুন রিলিক মনিটরিং রয়েছে যা আমাদের দেখায় যে সবচেয়ে বেশি সময় ব্যয়কারী অ্যাপ্লিকেশন ডেটাবেস কলগুলি কী। এটি আমাদের দেখায় যে একটি নির্দিষ্ট কল যা আমাদের অ্যাপ্লিকেশন ডিবিতে সময় কাটায় তার 99% শতাংশ অ্যাকাউন্টে আইডি ক্যোয়ারির মাধ্যমে সন্ধান করা সহজ:
SELECT `mytable`.* FROM `mytable` WHERE `mytable`.`id` = 123 LIMIT 1
(উপরের প্রসেসলিস্টে যে প্রশ্নগুলি চলছিল তা সম্পূর্ণ এক নয়)
এই অনুরোধটি গত সপ্তাহ বা তার চেয়ে ধীরে ধীরে বেড়েছে, সময়ের অনুরোধগুলির মধ্যে স্ট্যান্ডার্ড বিচ্যুতি বাড়ার সাথে সাথে সেকেন্ডের ক্ষেত্রে এটি সর্বাধিক সময় নির্ধারণ করে takes আমি মনে করি এটি কোনও কারণের চেয়ে সিপিইউ ব্যবহারের সমস্যার ফল মাত্র।
এই টেবিলটিতে প্রায় 80,000 সারি রয়েছে তাই বিশাল নয়। আশা করা যায় যে ডাটাবেসে থাকা বেশিরভাগ অ্যাপ্লিকেশনের সময়টি এই টেবিলটিতে রেকর্ড সন্ধান করতে ব্যয় করা হয়, অ্যাপটির মূল কার্যকারিতা এটিকে কেন্দ্র করে তৈরি করা হয়। আমি আমার অ্যাপ সার্ভার থেকে প্রোডাকশন ডাটাবেসে কয়েকবার একই জাতীয় ক্যোয়ারী চালিয়েছি, যখন সিপিইউ ব্যবহার প্রায় 100% থাকে এবং এটি 1 বা 2 এমএসের মধ্যে সাড়া দেয়।
উপরের সমস্তটির উপর ভিত্তি করে, আমরা কীভাবে আমাদের ডিবাগিংয়ের সাথে এগিয়ে চলব তা নিশ্চিত নই। কারও কি ধারণা ছিল যে কী ধরণের জিনিসগুলি মূল কারণ হতে পারে এবং কীভাবে এগুলি তদন্ত করবে? আমাদের ডিবি সার্ভারটি চালিত অন্তর্নিহিত সার্ভারটিতে অ্যাক্সেস সীমাবদ্ধ কারণ এটি একটি অ্যামাজন আরডিএস উদাহরণ।