মাইএসকিউএল ডিস্কে অস্থায়ী সারণী তৈরি করে। আমি কীভাবে এটি বন্ধ করব?


27

আমরা এমন একটি সাইট (মুডল) চালাচ্ছি যা ব্যবহারকারীরা বর্তমানে ধীর করে দেখছেন। আমি মনে করি ডিস্কে অস্থায়ী সারণী তৈরি করে আমি মাইএসকিউএল থেকে সমস্যাটি সন্ধান করেছি। আমি created_tmp_disk_tablesমাইএসকিএল ওয়ার্কবেঞ্চ সার্ভার প্রশাসনে পরিবর্তনশীল দেখি এবং প্রায় 50 টি টেবিল / সেকেন্ডের সাথে সংখ্যাটি বৃদ্ধি পায়। একদিন ব্যবহারের পরে,created_tmp_disk_tables 100k হয়। এছাড়াও, স্মৃতি প্রকাশিত হবে বলে মনে হয় না। সিস্টেমটি যতটা ব্যবহারযোগ্য না হয়ে যায় ততক্ষণ ব্যবহার বাড়তে থাকে এবং আমাদের মাইএসকিউএল পুনরায় শুরু করতে হয়। আমার প্রায় প্রতিদিন এটি পুনরায় শুরু করা দরকার এবং এটি প্রায় 30-35% উপলব্ধ মেমরি ব্যবহার করে এবং 80% দিয়ে দিন শেষ করে শুরু হয়।

ডাটাবেসে আমার কোনও ব্লব নেই এবং কোয়েরিতে কোনও নিয়ন্ত্রণ নেই তাই আমি সেগুলি অনুকূল করার চেষ্টা করতে পারি না। আমি কনফিগারেশন ফাইল তৈরি করতে পারকোনা কনফারগারেশন উইজার্ডও ব্যবহার করেছি তবে আমার.ini আমার সমস্যার সমাধানও করেনি।

প্রশ্নাবলি

  1. মাইএসকিউএলকে ডিস্কে অস্থায়ী সারণী তৈরি করা থেকে বিরত রাখতে আমার কী পরিবর্তন করা উচিত? আমার কি সেটিংস পরিবর্তন করতে হবে? আমি কি আরও স্মৃতি এড়ানো উচিত?

  2. আমি কীভাবে মাইএসকিউএলকে আমার স্মৃতিশক্তি না খাওয়া থেকে থামাতে পারি?

সম্পাদন করা

আমি 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-sizecreated_tmp_disk_tables বৃদ্ধি ইঙ্গিত হতে পারে যে টেবিল মেমরি পর্যাপ্ত জায়গা নেই যেমন 1024M করতে। এটি এর সমাধান করেনি।

রেফ: http://www.mysqlperformanceblog.com/2007/08/16/how-much-overhead-is-caused-by-on-disk-temporary-tables/

সম্পাদনা 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

মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
পল হোয়াইট GoFundMonica বলেছেন

উত্তর:


16

এর দিকে তাকালে my.iniআমার কাছে দুটি পরামর্শ রয়েছে

পরামর্শ # 1

আমি আপনার নীচের সেটিংস বন্ধ করতে হবে my.ini

sort_buffer_size=4M
join_buffer_size=4M

এটি কিছু যোগদান করে এবং মেমরিতে থাকা বাছাই করে। অবশ্যই একবারে JOINবা এর ORDER BYবেশি প্রয়োজন পরে 4Mএটি মাইআইএসএএম টেবিল হিসাবে ডিস্কে পৃষ্ঠাতে চলে আসবে।

আপনি যদি লগইন করতে না পারেন root@localhostতবে mysql এর সাথে পুনরায় চালু করুন

C:\> net stop mysql
C:\> net start mysql

আপনি যদি রুট @ লোকালহোস্ট হিসাবে লগইন করতে পারেন তবে এই সেটিংগুলি ব্যবহার করতে আপনাকে মাইএসকিএল পুনরায় আরম্ভ করতে হবে না।

এটি কেবল মাইএসকিউএল ক্লায়েন্টে চালান:

SET @FourMegs = 1024 * 1024 * 4;
SET GLOBAL sort_buffer_size = @FourMegs;
SET GLOBAL join_buffer_size = @FourMegs;

পরামর্শ # 2

যেহেতু আপনার ডেটা ড্রাইভে রয়েছে D:, আপনার ড্রাইভে ডিস্ক আই / ও থাকতে পারে C:

দয়া করে এই কোয়েরিটি চালান:

mysql> show variables like 'tmpdir';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| tmpdir        | C:\Windows\TEMP |
+---------------+-----------------+
1 row in set (0.00 sec)

যেহেতু আমি আমার ডেস্কটপে ডিফল্ট দিয়ে মাইএসকিএল চালাই, তাই আমার টেম্প টেবিলগুলি ড্রাইভে লেখা হচ্ছে C:। তাহলে ড্রাইভ ডি ড্রাইভ চেয়ে ভাল ডিস্ক নেই C:, সম্ভবত আপনি ড্রাইভে টেম্প টেবিল ম্যাপ করতে পারেন D:সেটিং দ্বারা tmpdir মধ্যে my.iniনিম্নরূপ:

tmpdir="D:/DBs/"

আপনাকে মাইএসকিএল পুনরায় চালু করতে হবে যেহেতু tmpdir একটি গতিশীল পরিবর্তনশীল নয়।

একবার চেষ্টা করে দেখো !!!

আপডেট 2013-10-29 10:09 EST

পরামর্শ # 3

উইন্ডোজটিতে মাইএসকিউএল চলছে এবং আপনি মূল প্যাকেজে কোয়েরিগুলিকে স্পর্শ করতে পারবেন না এই বিষয়টি বিবেচনা করে আমার দুটি ধারণা রয়েছে যা একসাথে করতে হবে done

আইডিএ # 1: একটি লিনাক্স মেশিনে ডাটাবেস সরান

তোমার পারা উচিত

  • একটি লিনাক্স মেশিন সেটআপ করুন
  • লিনাক্স মেশিনে মাইএসকিউএল ইনস্টল করুন
  • উইন্ডোজ মাইএসকিউএল জন্য বাইনারি লগিং সক্ষম করুন
  • mysqldump একটি পাঠ্য এসকিউএল ফাইলের ডাটাবেস
  • লিনাক্সে চলমান মাইএসকিউএলে এসকিউএল ফাইলটি লোড করুন
  • মাইএসকিউএল / উইন্ডোজ থেকে মাইএসকিউএল / লিনাক্সে প্রতিলিপি সেটআপ করুন

IDEA # 2: লিনাক্স মেশিনে নির্দেশ করার জন্য মুডলটি পুনরায় কনফিগার করুন

মুডল প্রথম স্থানে ল্যাম্পের জন্য ডিজাইন করা হয়েছিল। লোকালহোস্টের পরিবর্তে কনফিগার ফাইলগুলি লিনাক্স মেশিনের দিকে নির্দেশ করুন।

এখানে মাইএসকিউএল সেট আপ একটি পুরানো মুডল 2.3 ডক একটি লিঙ্ক: http://docs.moodle.org/23/en/Installing_Moodle#Create_an_empty_database

আমি নিশ্চিত যে সর্বশেষতম ডক্সও উপলব্ধ are

লিনাক্সে ডেটাবেস মুভ করার পয়েন্ট কী ???

এটি কীভাবে টেম্প টেবিল পরিস্থিতিকে সহায়তা করে ???

আমি তখন আপনার টেম্প টেবিলগুলির জন্য লক্ষ্য ফোল্ডার হিসাবে একটি র‌্যাম ডিস্ক সেট আপ করার পরামর্শ দেব

টেম্প টেবিল তৈরি এখনও ঘটবে, তবে এটি ডিস্কের পরিবর্তে র‌্যামে লেখা থাকবে। ডিস্ক I / O হ্রাস করা হচ্ছে।

আপডেট 2013-10-29 11:24 EST

পরামর্শ # 4

আমি একটি দ্রুত RAID-0 ডিস্ক (32+ গিগাবাইট) এর সাহায্যে SUGGESTION # 2 পুনর্বিবেচনা করার পরামর্শ দিচ্ছি , এটিকে ড্রাইভ টি: (টেম্পের জন্য টি) হিসাবে কনফিগার করে। এ জাতীয় ডিস্ক ইনস্টল করার পরে এটিকে যুক্ত করুন my.ini:

[mysqld]
tmpdir="T:\"

মাইএসকিউএল পুনঃসূচনা প্রয়োজন হবে, ব্যবহার করে

net stop mysql
net start mysql

বিটিডাব্লু আমি উদ্দেশ্য করে বলেছিলাম যে আপনি একটি র‌্যাড -১, র‌্যাড -১০-এর মাধ্যমে ভাল লেখার পারফরম্যান্স পেতে পারেন। একটি টিএমপি টেবিল ডিস্ক এমন কিছু নয় যা আমি অতিরিক্ত কাজ করব।

@ রেমন্ডনিজল্যান্ড যেভাবে মন্তব্য করছে তাতে প্রশ্নের উত্সাহ না দিয়ে আপনি কোনওভাবেই টেম্প টেবিল তৈরির গণনা হ্রাস করতে পারবেন না। SUGGESTION #3এবং SUGGESTION #4একমাত্র বিকল্প হিসাবে টেম্প টেবিল তৈরির গতি বাড়িয়ে এবং টেম্প টেবিল I / O সরবরাহ করে।


13

আমি এখানে আমার নিজের প্রশ্নের সম্পূর্ণতা জন্য উত্তর

আমি @ রোল্যান্ডো মাইএসকিউএলডিবিএকে পছন্দসই উত্তর হিসাবে নির্বাচন করব কারণ এটি আমার সমস্যাটিকে সর্বাধিক ইঙ্গিত দিয়েছিল যদিও এটি আসলে আমার সমস্যার সমাধান করেনি।

নীচে আমার তদন্তের ফলাফল রয়েছে

উপসংহার

উইন্ডোজে মাইএসকিউএল কনফিগারেশন ফাইলগুলির সামগ্রী পরিবর্তন করে মাইএসকিউএলকে প্রচুর অস্থায়ী সারণী তৈরি করে এবং সুরক্ষা দেয় না।

বিস্তারিত

টেবিলটি আমার জিজ্ঞাসাগুলি কার্যকর করার আগে যথাক্রমে my.ini এ সংশোধিত পরামিতিগুলির বিশদটি জানায়। মাইএসকিউএল প্রতিটি পরীক্ষার মধ্যে পুনরায় শুরু হয়েছিল।

আমি মূল প্রশ্নে প্রাপ্ত my.ini কে টেম্পলেট হিসাবে ব্যবহার করেছি এবং আমি নীচের সারণি অনুসারে প্যারামিটারগুলির মান এক এক করে পরিবর্তন করেছি।

আমি জেমিটারকে ১০০ বার বার পুনরাবৃত্তি করে 100 সমবর্তী ওয়েব অনুরোধগুলি (যেমন আমাদের ব্যবহারের প্রতিনিধিত্ব করে) উত্পন্ন করতে ব্যবহার করেছি । প্রতিটিতে Testমোট 1000 টি অনুরোধ রয়েছে। এটি পরবর্তী ডাটাবেস কলগুলির ফলস্বরূপ। এটি দেখিয়েছিল যে মাইএসকিউএল আমাদের কনফিগারেশন প্যারামিটারগুলি পরিবর্তিত করেই প্রচুর অস্থায়ী টেবিল তৈরি করবে।

+----+------------+-------+---------------+------------+
|Test|Parameter   |Value  |NumOfTempTables|Db Max Conn |
+----+------------+-------+---------------+------------+
| 1  |key_buffer_ | 25M   | 30682         | 29         |
|    |size        |       |               |            | 
+----+------------+-------+---------------+------------+
| 2  |key_buffer_ | 55M   | 30793         | 29         |
|    |size        |       |               |            |
+----+------------+-------+---------------+------------+
| 3  |key_buffer_ | 100M  | 30666         | 28         |
|    |size        |       |               |            |
+----+------------+-------+---------------+------------+
| 4  |key_buffer_ | 125M  | 30593         | 24         |
|    |size        |       |               |            | 
+----+------------+-------+---------------+------------+
| 5  |query_cache_| 100M  | 30627         | 32         |
|    |size        |       |               |            |
+----+------------+-------+---------------+------------+
| 6  |query_cache_| 250M  | 30761         | 26         |
|    |size        |       |               |            |
+----+------------+-------+---------------+------------+
| 7  |query_cache_| 500M  | 30864         | 83*        |
|    |size        |       |               |            |
+----+------------+-------+---------------+------------+
| 8  |query_cache_| 1G    | 30706         | 75*        |
|    |size        |       |               |            |
+----+------------+-------+---------------+------------+
| 9  |tmp_table_  | 125M  | 30724         | 31         |
|    |size        |       |               |            |
+----+------------+-------+---------------+------------+
| 10 |tmp_table_  | 250M  | 30689         | 90*        |
|    |size        |       |               |            |
+----+------------+-------+---------------+------------+
| 11 |tmp_table_  | 500M  | 30792         | 28         |
|    |size        |       |               |            |  
+----+------------+-------+---------------+------------+
| 12 |Sort_buffer&| 256K  | 30754         | 28         |
|    |Join_buffer |       |               |            |
+----+------------+-------+---------------+------------+
| 13 |Sort_buffer&| 512K  | 30788         | 30         |
|    |Join_buffer |       |               |            | 
+----+------------+-------+---------------+------------+
| 14 |Sort_buffer&| 1M    | 30788         | 28         |
|    |Join_buffer |       |               |            | 
+----+------------+-------+---------------+------------+
| 15 |Sort_buffer&| 4M    | 30642         | 35         |
|    |Join_buffer |       |               |            |
+----+------------+-------+---------------+------------+
| 16 |innodb-     | 1G    | 30695         | 33         |
|    |buffer-     |       |               |            |
|    |pool-size   |       |               |            |
+----+------------+-------+---------------+------------+
| 17 |innodb-     | 2G    | 30791         | 28         |
|    |buffer-     |       |               |            |
|    |pool-size   |       |               |            | 
+----+------------+-------+---------------+------------+
| 18 |innodb-     | 3G    | 30719         | 34         |
|    |buffer-     |       |               |            |
|    |pool-size   |       |               |            |  
+----+------------+-------+---------------+------------+

* গড়ে তিন রান

নীচের চিত্রগুলি বিভিন্ন কনফিগারেশনের জন্য প্রয়োজনীয় মেমরির পরিমাণ এবং সিপিইউ ডেটাবেস সার্ভার চিত্রিত করে। কালো লাইনগুলি সর্বনিম্ন এবং সর্বাধিক মানগুলি নির্দেশ করে এবং নীল বারগুলি শুরু এবং শেষের মানগুলি নির্দেশ করে। সর্বাধিক স্মৃতি ছিল 4096Mপ্রশ্নটিতে নির্দেশিত হিসাবে।

স্মৃতি এর ব্যবহার CPU 'র ব্যবহার


আপনি কোন স্টোরেজ ইঞ্জিন ব্যবহার করছেন? মাইস্যাম? আপনি যদি মাইআইএসএএম টেবিল ব্যবহার না করে থাকেন তবে কী_বফার_সাইজের উপর নির্ভর করা অর্থপূর্ণ নয়। যদি আপনি ইনোডাব স্টোরেজ ইঞ্জিন ব্যবহার করেন তবে ইনোডাব_বফার_পুল_সাইজের আকারটি। আপনি কি ক্যোরি_ক্যাচ ব্যবহার করছেন?
কাসি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.