আমরা এমন একটি সাইট (মুডল) চালাচ্ছি যা ব্যবহারকারীরা বর্তমানে ধীর করে দেখছেন। আমি মনে করি ডিস্কে অস্থায়ী সারণী তৈরি করে আমি মাইএসকিউএল থেকে সমস্যাটি সন্ধান করেছি। আমি created_tmp_disk_tables
মাইএসকিএল ওয়ার্কবেঞ্চ সার্ভার প্রশাসনে পরিবর্তনশীল দেখি এবং প্রায় 50 টি টেবিল / সেকেন্ডের সাথে সংখ্যাটি বৃদ্ধি পায়। একদিন ব্যবহারের পরে,created_tmp_disk_tables
100k হয়। এছাড়াও, স্মৃতি প্রকাশিত হবে বলে মনে হয় না। সিস্টেমটি যতটা ব্যবহারযোগ্য না হয়ে যায় ততক্ষণ ব্যবহার বাড়তে থাকে এবং আমাদের মাইএসকিউএল পুনরায় শুরু করতে হয়। আমার প্রায় প্রতিদিন এটি পুনরায় শুরু করা দরকার এবং এটি প্রায় 30-35% উপলব্ধ মেমরি ব্যবহার করে এবং 80% দিয়ে দিন শেষ করে শুরু হয়।
ডাটাবেসে আমার কোনও ব্লব নেই এবং কোয়েরিতে কোনও নিয়ন্ত্রণ নেই তাই আমি সেগুলি অনুকূল করার চেষ্টা করতে পারি না। আমি কনফিগারেশন ফাইল তৈরি করতে পারকোনা কনফারগারেশন উইজার্ডও ব্যবহার করেছি তবে আমার.ini আমার সমস্যার সমাধানও করেনি।
প্রশ্নাবলি
মাইএসকিউএলকে ডিস্কে অস্থায়ী সারণী তৈরি করা থেকে বিরত রাখতে আমার কী পরিবর্তন করা উচিত? আমার কি সেটিংস পরিবর্তন করতে হবে? আমি কি আরও স্মৃতি এড়ানো উচিত?
আমি কীভাবে মাইএসকিউএলকে আমার স্মৃতিশক্তি না খাওয়া থেকে থামাতে পারি?
সম্পাদন করা
আমি slow_queries
লগ সক্ষম করেছি এবং আবিষ্কার করেছি যে ক্যোরিটি SELECT GET_LOCK()
ধীর হিসাবে লগ হয়েছে। একটি দ্রুত অনুসন্ধানে প্রকাশিত হয়েছে যে আমি পিএইচপি কনফিগারেশনে ( mysqli.allow_persistent = ON
) কনসাল্টে সংযোগের অনুমতি দিয়েছি । আমি এটা বন্ধ। এটি মাইএসকিউএল মেমরি গ্রহণ করে এমন হারকে হ্রাস করেছে t এটি এখনও অস্থায়ী সারণী তৈরি করছে।
আমি এটিও পরীক্ষা করেছিলাম যে key_buffer size
যথেষ্ট পরিমাণে বড়। আমি ভেরিয়েবলের দিকে তাকালাম key_writes
। এটি শূন্য হওয়া উচিত। যদি তা না হয় তবে আমার বৃদ্ধি key_buffer_size
শূন্য key_reads
এবং শূন্য key_writes
তাই আমি ধরে নিই যেkey_buffer_size
যথেষ্ট পরিমাণে বড়।
আমি বেড়ে tmp_table_size
এবং max-heap-table-size
created_tmp_disk_tables বৃদ্ধি ইঙ্গিত হতে পারে যে টেবিল মেমরি পর্যাপ্ত জায়গা নেই যেমন 1024M করতে। এটি এর সমাধান করেনি।
সম্পাদনা 2
যদি আপনি sort_merge_passes
বিশ্বব্যাপী পরিস্থিতি আউটপুট প্রতি সেকেন্ডে অনেকগুলি দেখতে পান তবে আপনি sort_buffer_size
মান বাড়ানোর বিষয়টি বিবেচনা করতে পারেন । আমার sort_merge_passes
এক ঘন্টার মধ্যে 2 ছিল তাই আমি sort_buffer_size
এটিকে যথেষ্ট বড় বলে মনে করি।
তথ্যসূত্র: মাইএসকিএল ম্যানুয়াল চালু sort_buffer_size
সম্পাদনা 3
@ রোল্যান্ডোমাইএসকিউএলডিবিএর পরামর্শ অনুসারে আমি বাছাই করে বাফারগুলিতে যোগদান করেছি। ফলাফলটি নীচের টেবিলটিতে প্রদর্শিত হবে তবে আমি মনে করি এটি created_tmp_tables_on_disk
এখনও বেশি। আমি মান পরিবর্তন করার পরে আমি মাইএসকিএল সার্ভারটি পুনরায় চালু করেছি এবং created_tmp_tables_on_disk
একদিন (8 ঘন্টা) পরে পরীক্ষা করেছি এবং গড় গণনা করেছি। অন্য কোন পরামর্শ? আমার কাছে মনে হচ্ছে এমন কিছু আছে যা কোনও এক ধরণের ধারকের ভিতরে ফিট করে না তবে আমি এটি কী তা ব্যবহার করতে পারি না।
+---------------------+-------------+-------------+--------------------+
| Tmp_table_size, | Sort_buffer | Join_buffer | No of created |
| max_heap_table_size | | | tmp_tables on disk |
+---------------------+-------------+-------------+--------------------+
| 125M | 256K | 256K | 100k/h |
+---------------------+-------------+-------------+--------------------+
| 125M | 512K | 512K | 100k/h |
+---------------------+-------------+-------------+--------------------+
| 125M | 1M | 1M | 100k/h |
+---------------------+-------------+-------------+--------------------+
| 125M | 4M | 4M | 100k/h |
+---------------------+-------------+-------------+--------------------+
এটি আমার কনফিগারেশন:
+-----------------------+-----------------------+
|DATABASE SERVER |WEB SERVER |
+-----------------------+-----------------------+
|Windows Server 2008 R2 |Windows Server 2008 R2 |
+-----------------------+-----------------------+
|MySQL 5.1.48 |IIS 7.5 |
+-----------------------+-----------------------+
|4 Core CPU |4 Core CPU |
+-----------------------+-----------------------+
|4GB RAM |8GB RAM |
+-----------------------+-----------------------+
অতিরিক্ত তথ্য
+--------------------+---------+
|PARAM |VALUE |
+--------------------+---------+
|Num of tables in Db |361 |
+--------------------+---------+
|Size of database |2.5G |
+--------------------+---------+
|Database engine |InnoDB |
+--------------------+---------+
|Read/write ratio |3.5 |
|(Innodb_data_read/ | |
|innodb_data_written)| |
+--------------------+---------+
|Avg table size |15k rows |
+--------------------+---------+
|Max table size |744k rows|
+--------------------+---------+
এই সেটআপটি আমাকে দেওয়া হয়েছিল তাই এটির উপর আমার সীমিত নিয়ন্ত্রণ রয়েছে। ওয়েব সার্ভারটি খুব কম সিপিইউ এবং র্যাম ব্যবহার করছে তাই আমি সেই মেশিনকে বাধা হিসাবে বাদ দিয়েছি। মাইএসকিউএল সেটিংসের বেশিরভাগই একটি কনফিগার স্বতঃ-উত্পাদন সরঞ্জাম থেকে উদ্ভূত।
আমি কয়েকটি প্রতিনিধি দিবসে পার্ফমন ব্যবহার করে সিস্টেমটি পর্যবেক্ষণ করেছি। সেখান থেকে, আমি উপসংহারে পৌঁছেছি যে এটি ওএস নয় যা ডিস্কে অদলবদল হয়।
My.ini
[client]
port=3306
[mysql]
default-character-set=utf8
[mysqld]
port=3306
basedir="C:/Program Files/MySQL/MySQL Server 5.1/"
datadir="D:/DBs/Data/"
default-character-set=utf8
default-storage-engine=INNODB
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
max_connections=125
query_cache_size=350M
table_cache=1520
tmp_table_size=125M
table-definition-cache= 1024
max-heap-table-size= 32M
thread_cache_size=38
MyISAM Specific options
myisam_max_sort_file_size=100G
myisam_sort_buffer_size=125M
key_buffer_size=55M
read_buffer_size=1024K
read_rnd_buffer_size=256K
sort_buffer_size=1024K
join_buffer_size=1024K
INNODB Specific options
innodb_data_home_dir="D:/DBs/"
innodb_additional_mem_pool_size=32M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=16M
innodb_buffer_pool_size=2G
innodb_log_file_size=407M
innodb_thread_concurrency=8