ইনোডাব_ফ্লুশ_লগ_এটি_আরটিএক্স_কমিতে গতিশীল পরিবর্তন


11

এটি এই প্রশ্নের সাথে সম্পর্কিত । এটি InnoDB টেবিলগুলির জন্য আরও ভাল পারফরম্যান্স পেতে সহায়তা করে।

মাইএসকিউএল ম্যানুয়াল অনুসারে , innodb_flush_log_at_trx_commitএটি একটি গ্লোবাল ডায়নামিক ভেরিয়েবল। সুতরাং, আমি সেট গ্লোবাল কমান্ড ব্যবহার করে এটি পরিবর্তন করতে পারি এবং মনে হচ্ছে এটি কাজ করছে।

mysql> SET GLOBAL innodb_flush_log_at_trx_commit=2;
Query OK, 0 rows affected

mysql> SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit';
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 2     |
+--------------------------------+-------+
1 row in set

কিন্তু, এটি আসল মাইএসকিউএল সেটিংস পরিবর্তন করে নি। আমি যখন my.cnf আপডেট করেছি এবং মাইএসকিউএল সার্ভারটি পুনরায় চালু করেছি তখন এটি কার্যকর হয়েছিল। সুতরাং, আমি রান সময়ে গ্লোবাল ভেরিয়েবল পরিবর্তন করতে পারি না?

আমি ডিফল্ট মানটি পছন্দ করি innodb_flush_log_at_trx_commit=1তবে একটি বৃহত ডাটাবেস দ্রুত পাওয়ার জন্য পুনরুদ্ধার প্রক্রিয়া চালানোর আগে আমার এটি পরিবর্তন করতে হবে। প্রক্রিয়াটি শেষ হয়ে গেলে, আমি মানটি আবার পরিবর্তন করতে চাই run এটি রান টাইমে কি সম্ভব?

আমার ভাগ করা হোস্টিং সার্ভারে আমার c.cnf এ অ্যাক্সেস নেই ।

উত্তর:


12

যদিও আমি রোল্যান্ডোর পরিবর্তনের প্রস্তাবের সাথে একমত innodb_flush_method, আপনি কী বোঝাতে চেয়েছিলেন তা আমি 100% পরিষ্কার করে নি:

এটি আসল মাইএসকিউএল সেটিংস পরিবর্তন করে নি

আমি এই সতর্কতামূলক বিষয়টি উল্লেখ করতে চাই যে গ্লোবাল ভেরিয়েবলে পরিবর্তন করা যে কোনও নতুন সংযোগকে প্রভাবিত করে, তবে বর্তমান অধিবেশন (জোর দেওয়া খনি) পরিবর্তন করে না:

গ্লোবাল ভেরিয়েবল পরিবর্তন বর্তমানে সংযুক্ত যে কোনও ক্লায়েন্টের জন্য সেশন ভেরিয়েবলকে প্রভাবিত করে না ( এমনকি সেটের বিশ্বব্যাপী বিবৃতি জারি করে এমন ক্লায়েন্টেরও নয় )।

সুতরাং এটি যাচাই করতে:

mysql> SHOW GLOBAL VARIABLES LIKE 'innodb_flush_log%';
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 1     |
+--------------------------------+-------+
1 row in set (0.00 sec)


mysql> SHOW SESSION VARIABLES LIKE 'innodb_flush_log%';
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 1     |
+--------------------------------+-------+
1 row in set (0.00 sec)

mysql> SET GLOBAL innodb_flush_log_at_trx_commit=2;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GLOBAL VARIABLES LIKE 'innodb_flush_log%';
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 2     |
+--------------------------------+-------+
1 row in set (0.00 sec)

mysql> SHOW SESSION VARIABLES LIKE 'innodb_flush_log%';
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 1     |
+--------------------------------+-------+
1 row in set (0.00 sec)

mysql> connect;
Connection id:    6
Current database: *** NONE ***

mysql> SHOW SESSION VARIABLES LIKE 'innodb_flush_log%';
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 2     |
+--------------------------------+-------+
1 row in set (0.00 sec)

2
এই উত্তরটি বোঝা যায়। ডকুমেন্টেশন ( dev.mysql.com/doc/refman/5.5/en/… ) এটি বলে না যে সেশন স্তরের ভেরিয়েবলটি কেবলমাত্র বিশ্বব্যাপী স্তর পরিবর্তন করতে সক্ষম। আমি অভিজ্ঞতা পেয়েছি যে অনেক সময় সর্বাধিক সংযোগগুলি পরিবর্তন করা SET GLOBAL max_connections = 1000;এবং যখন আমি SHOW VARIABLES LIKE 'max_connections';পুরনো মানটি দেখতে দৌড়ে যাই আমি লগ আউট এবং ফিরে না আসা পর্যন্ত বাদামকে চালিত করব + এই দৃষ্টিভঙ্গির জন্য যা সম্মতিযুক্ত এবং প্রায়শই ভুলে যায়।
রোল্যান্ডোমাইএসকিউএলডিবিএ

@ রোলান্ডো আমাকেও! এছাড়াও, যখন আমি জানতে পেরেছিলাম যে আমি 'সংযোগ' করতে পারি; পরিবর্তে লগ আউট এবং ফিরে ইন। সময় সাশ্রয়!
ডেরেক ডউনি

connectমাইএসকিউএল চালানোর সেই ধারণাটি আমার কাছে আসলে নতুন new পোস্টগ্র্রেএসকিউএল এবং ওরাকল এ আমি এক মিলিয়ন বার করেছি। আমি একবারও মাইএসকিউএলকে এটি করার অনুমতি দেওয়ার কথা ভাবি নি
RolandoMySQLDBA

@ ডিস্টেস্ট, আপনার উত্তরের জন্য ধন্যবাদ। আমার গভীর পরীক্ষা অনুসারে, এটি গতিশীলভাবে কাজ করেছিল। আমার লোকালহোস্টে, সংযোগ চালানো ছাড়াই সেশন ভেরিয়েবল পরিবর্তন করা হয়েছিল (ইস্যু করার সময় আমি ত্রুটি পেয়েছি connect)। মান 2 সহ, 2,241,319 রেকর্ড আমদানি করতে 27 মিনিট 43 সেকেন্ড সময় লেগেছিল, যদিও এটির মান 1 দিয়ে প্রায় 1 দিন লেগেছে The সেটিংটি বর্তমান সেশনে কাজ করছে বলে মনে হচ্ছে তবে এটি পুনরায় my.cnfআরম্ভের পরে মূল সেটিংসটি পুনরুদ্ধার করেছে ।
সিথু

@ ডেরেকডাউন, এটি কি কিছু নির্দিষ্ট সেটিংসের মতো innodb_flush_log_at_trx_commit? বা এটি কি সব সেটিংসের জন্য, সেটিংসটি globalবর্তমান সেশনে প্রভাব ফেলবে না?
পেসারিয়ার

7

ইনোডাব_ফ্লুশ_লগ_্যাট_আরটিএক্সএক্সমিট সেট করে , আপনি মাইকিকিএলডি / ওএস আন্তঃব্যবযোগিতা নিয়ে বিভ্রান্তির ঝুঁকি নিচ্ছেন । আমি এটি বলছি কারণ ফ্লাশটি সম্পাদন করতে ওএসকে বিশ্বাস করা হচ্ছে।

মাইএসকিউএল ডকুমেন্টেশন থেকে সাবধানতা নোট করুন

অনেক অপারেটিং সিস্টেম এবং কিছু ডিস্ক হার্ডওয়্যার ফ্লাশ-থেকে-ডিস্ক অপারেশনকে বোকা করে। তারা মাইএসকিএলডকে বলতে পারে যে ফ্লাশটি ঘটেছে যদিও তা হয়নি। তারপরে লেনদেনের স্থায়িত্বটি সেটিংস 1 এর সাথেও গ্যারান্টিযুক্ত নয় এবং সবচেয়ে খারাপ ক্ষেত্রে কোনও বিদ্যুৎ বিভ্রাট এমনকি ইনোডিবি ডাটাবেসকে দূষিত করতে পারে। এসসিএসআই ডিস্ক নিয়ামক বা ডিস্কে ব্যাটারি ব্যাকড ডিস্ক ক্যাশে ব্যবহার করে ফাইল ফ্লাশ গতি বাড়িয়ে তোলে এবং অপারেশনটিকে আরও নিরাপদ করে তোলে। আপনি ইউনিক্স কমান্ড hdparm ব্যবহার করে হার্ডওয়্যার ক্যাশে ডিস্ক রাইটিং ক্যাচিং অক্ষম করতে বা হার্ডওয়্যার বিক্রেতার সাথে নির্দিষ্ট অন্য কোনও কমান্ড ব্যবহার করতে পারেন।

এটি যা বলে তা নীচে: ওএস প্রতারণামূলক স্বামীর মতো থাকতে পারে। ওএস বলে যে এটি ডিস্কে ফ্লাশ হবে এবং কেবল এটি করে না। অতএব, আপনি যদি ইনডোডবি_ফ্লুশ_লগ_এট_আরটিএক্সএক্সমিট সেট করে থাকেন তবে আপনাকে অবশ্যই মাইএসকিএলডি ফ্লাশিং থেকে ডিস্কে ওএস ফ্লাশিং ডিস্কে তালাক দিতে হবে।

যদি আপনি ইতিমধ্যে এটি না করে থাকেন তবে ইনোডাব_ফ্লুশ_মোথারটিকে ও_ডিআরইসিটিতে সেট করার চেষ্টা করুন । আপনি একটি পার্থক্য দেখতে পাবেন কারণ ফ্লাশ পদ্ধতিতে প্রচুর পার্থক্য রয়েছে ( মাইএসকিউএল ইনোডাব_ফ্লুশ_মোথার ভেরিয়েবলে আমার Mar 04, 2011পোস্টের স্পষ্টতা দেখুন )।

বিচারকার্য স্থগিত রাখার আদেশ

যেমনটি আপনি উল্লেখ করেছেন, আপনার অ্যাক্সেস নেই my.cnf। অনুগ্রহ করে আপনার সরবরাহকারীর সিসএডমিনের সাথে যোগাযোগ করুন এবং ইনেডোড_ফ্লুশ_মোথার পরিবর্তন করুন।

আপডেট 2012-12-10 12:45 ইডিটি

আমি বর্তমানে আমার পিসিতে মাইএসকিউএল 5.5.12 চালাচ্ছি। আমি সংযোগ স্থাপন এবং চালানোর সময় show variables like 'innodb_flush_method';আমি পেতে

mysql> show variables like 'innodb_flush_method';
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| innodb_flush_method |       |
+---------------------+-------+
1 row in set (0.05 sec)

mysql>

যেহেতু এটি ফাঁকা, এটি কেবলমাত্র ডিফল্ট সেটিংস ব্যবহার করার ইঙ্গিত দেয়। মাইএসকিউএল ইনোডাব_ফ্লুশ_মোথার ভেরিয়েবলের স্পষ্টতার জন্য দয়া করে আমার মার্চ 04, 2011 পোস্টটি পড়ুন


আমি আমার লোকালহোস্টে প্রথম পরীক্ষা করেছি। আমি খুঁজে পাইনি innodb_flush_methodমধ্যে my.ini(না my.cnf)। সার্ভার তথ্য - এ্যাপাচি 2.4.1, পিএইচপি 5.4.4, মাইএসকিউএল 5.5
Sithu

আমি লক্ষ্য করেছি যে সার্ভার সংস্করণ বা আইএনআই / সিএনএফ নির্বিশেষে কনফিগারেশন ফাইলটিতে innodb_flush_methodসেটিংস নেই এবং SHOW VARIABLESএটি প্রদর্শন করে না।
সিথু

আপনার আপডেটের জন্য ধন্যবাদ, আমি এটি পেয়েছি, আমি কেন ভেবেছিলাম কেন আমরা এর মান দেখতে পারি না। যেহেতু আমি এটি সন্ধান করতে পারিনি my.iniবা my.cnfএটি কোনও গতিশীল পরিবর্তনশীল নয়, আমি কীভাবে এটি কনফিগার করতে পারি তা আমি নিশ্চিত নই।
সিথু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.