মাইএসকিউএল উদাহরণটি "এসআইএনসি সূচী করছেন" স্টল করছে


12

সমস্যা

মাইএসকিউএল 5.6.20 চলার উদাহরণ (বেশিরভাগই স্রেফ) ইনোডিবি টেবিল সহ একটি ডাটাবেস "কোয়েরি এন্ড" অবস্থায় থাকা সমস্ত INSERT, আপডেট এবং ডিলিট ক্যোরিয়াস সহ 1-4 মিনিটের সময়কালের জন্য সমস্ত আপডেট ক্রিয়াকলাপের মাঝে মাঝে স্টল প্রদর্শন করছে। এটি অবশ্যই সবচেয়ে দুর্ভাগ্যজনক। মাইএসকিউএল স্লো ক্যোয়ারী লগ অত্যন্ত উন্মত্ত ক্যোয়ারী লগইন করছে পাগল ক্যোয়ারির সময়গুলির সাথে, শত শত একই টাইমস্ট্যাম্পের সাথে একই সময়ে যেখানে স্টলটি সমাধান করা হয়েছে ঠিক তার পয়েন্টের সাথে সম্পর্কিত:

# Query_time: 101.743589  Lock_time: 0.000437 Rows_sent: 0  Rows_examined: 0
SET timestamp=1409573952;
INSERT INTO sessions (redirect_login2, data, hostname, fk_users_primary, fk_users, id_sessions, timestamp) VALUES (NULL, NULL, '192.168.10.151', NULL, 'anonymous', '64ef367018099de4d4183ffa3bc0848a', '1409573850');

এবং এই সময়সীমার অতিরিক্ত আই / ও লোড না হলেও ডিভাইসের পরিসংখ্যানগুলি বৃদ্ধি দেখানো হচ্ছে (এক্ষেত্রে আপডেটগুলি উপরের স্টেটমেন্টের টাইমস্ট্যাম্প অনুসারে 14:17:30 - 14:19:12 স্থির ছিল):

# sar -d
[...]
02:15:01 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
02:16:01 PM    dev8-0     41.53    207.43   1227.51     34.55      0.34      8.28      3.89     16.15
02:17:01 PM    dev8-0     59.41    137.71   2240.32     40.02      0.39      6.53      4.04     24.00
02:18:01 PM    dev8-0    122.08   2816.99   1633.44     36.45      3.84     31.46      1.21      2.88
02:19:01 PM    dev8-0    253.29   5559.84   3888.03     37.30      6.61     26.08      1.85      6.73
02:20:01 PM    dev8-0    101.74   1391.92   2786.41     41.07      1.69     16.57      3.55     36.17
[...]
# sar
[...]
02:15:01 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
02:16:01 PM     all     15.99      0.00     12.49      2.08      0.00     69.44
02:17:01 PM     all     13.67      0.00      9.45      3.15      0.00     73.73
02:18:01 PM     all     10.64      0.00      6.26     11.65      0.00     71.45
02:19:01 PM     all      3.83      0.00      2.42     24.84      0.00     68.91
02:20:01 PM     all     20.95      0.00     15.14      6.83      0.00     57.07

প্রায়শই না, আমি মাইএসকিএল ধীর লগে লক্ষ্য করেছি যে সর্বাধিক প্রাচীন ক্যোয়ারী স্টলিং একটি ভিশারআর প্রাথমিক কী এবং একটি পূর্ণ-পাঠ্য অনুসন্ধান সূচী সহ একটি বৃহত-ইস্ (10 ডলার সারি) সারণিতে একটি INSERT IN

CREATE TABLE `files` (
  `id_files` varchar(32) NOT NULL DEFAULT '',
  `filename` varchar(100) NOT NULL DEFAULT '',
  `content` text,
  PRIMARY KEY (`id_files`),
  KEY `filename` (`filename`),
  FULLTEXT KEY `content` (`content`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

আরও তদন্ত (অর্থাত্ ইঞ্জিন ইনোডব স্ট্যাটাস দেখায়) প্রমাণিত হয়েছে যে এটি সর্বদা পুরো টেক্সট সূচী ব্যবহার করে একটি টেবিলের আপডেট যা স্টলের কারণ হয়ে উঠছে। "শো ইঞ্জিন ইনোডব স্ট্যাটাস" এর স্বতন্ত্র লেনদেন বিভাগে প্রাচীনতম চলমান লেনদেনের জন্য এই দুটিয়ের মতো এন্ট্রি রয়েছে:

---TRANSACTION 162269409, ACTIVE 122 sec doing SYNC index
6 lock struct(s), heap size 1184, 0 row lock(s), undo log entries 19942
TABLE LOCK table "vw"."FTS_000000000000224a_00000000000036b9_INDEX_1" trx id 162269409 lock mode IX
TABLE LOCK table "vw"."FTS_000000000000224a_00000000000036b9_INDEX_2" trx id 162269409 lock mode IX
TABLE LOCK table "vw"."FTS_000000000000224a_00000000000036b9_INDEX_3" trx id 162269409 lock mode IX
TABLE LOCK table "vw"."FTS_000000000000224a_00000000000036b9_INDEX_4" trx id 162269409 lock mode IX
TABLE LOCK table "vw"."FTS_000000000000224a_00000000000036b9_INDEX_5" trx id 162269409 lock mode IX
TABLE LOCK table "vw"."FTS_000000000000224a_00000000000036b9_INDEX_6" trx id 162269409 lock mode IX
---TRANSACTION 162269408, ACTIVE (PREPARED) 122 sec committing
mysql tables in use 1, locked 1
1 lock struct(s), heap size 360, 0 row lock(s), undo log entries 1
MySQL thread id 165998, OS thread handle 0x7fe0e239c700, query id 91208956 192.168.10.153 root query end
INSERT INTO files (id_files, filename, content) VALUES ('f19e63340fad44841580c0371bc51434', '1237716_File_70380a686effd6b66592bb5eeb3d9b06.doc', '[...]
TABLE LOCK table `vw`.`files` trx id 162269408 lock mode IX

সুতরাং সেখানে কিছু ভারী পূর্ণ পাঠ্য সূচী ক্রিয়া চলছে ( doing SYNC index) কোনও সারণীতে সমস্ত সাবসেক্টেন্টগুলি আপডেট বন্ধ করে ।

লগ থেকে মত একটি বিট মনে হয় undo log entriesজন্য নম্বর doing SYNC index~ 150 এ এগিয়ে যাচ্ছে / s পর্যন্ত এটি 20,000, এই স্থিতিতে অপারেশন সম্পন্ন করা হয় বাতলান ছুঁয়েছে।

এই নির্দিষ্ট সারণির FTS আকারটি বেশ চিত্তাকর্ষক:

# du -c FTS_000000000000224a_00000000000036b9_*
614404  FTS_000000000000224a_00000000000036b9_INDEX_1.ibd
2478084 FTS_000000000000224a_00000000000036b9_INDEX_2.ibd
1576964 FTS_000000000000224a_00000000000036b9_INDEX_3.ibd
1630212 FTS_000000000000224a_00000000000036b9_INDEX_4.ibd
1978372 FTS_000000000000224a_00000000000036b9_INDEX_5.ibd
1159172 FTS_000000000000224a_00000000000036b9_INDEX_6.ibd
9437208 total

যদিও ইস্যুটি টেবিলগুলির দ্বারাও এটির মতো উল্লেখযোগ্যভাবে কম বিশাল এফটিএস ডেটা আকারের সাথে ট্রিগার করা হয়েছে:

# du -c FTS_0000000000002467_0000000000003a21_INDEX*
49156   FTS_0000000000002467_0000000000003a21_INDEX_1.ibd
225284  FTS_0000000000002467_0000000000003a21_INDEX_2.ibd
147460  FTS_0000000000002467_0000000000003a21_INDEX_3.ibd
135172  FTS_0000000000002467_0000000000003a21_INDEX_4.ibd
155652  FTS_0000000000002467_0000000000003a21_INDEX_5.ibd
106500  FTS_0000000000002467_0000000000003a21_INDEX_6.ibd
819224  total

এই ক্ষেত্রে স্টলের সময়ও প্রায় একই রকম। আমি bugs.mysql.comএকটি বাগ খুলেছি যাতে ডেভসরা এটি দেখতে পারে।

স্টলের প্রকৃতিটি আমাকে প্রথমে সন্দেহ করেছিল লগ ফ্লাশিং কার্যকলাপটিকে অপরাধী হিসাবে চিহ্নিত করেছে এবং মাইএসকিউএল 5.5 এর সাথে লগ ফ্লাশিং পারফরম্যান্স ইস্যু সম্পর্কিত এই পারকোনা নিবন্ধটি খুব অনুরূপ লক্ষণ বর্ণনা করছে, তবে আরও ঘটনা প্রমাণ করেছে যে এই ডাটাবেসে সিঙ্গেল মাইএসএএম টেবিলটিতে ইনসার্ট অপারেশনগুলি রয়েছে। এছাড়াও স্টল দ্বারা প্রভাবিত হয়, সুতরাং এটি কোনও InnoDB- ইস্যু বলে মনে হয় না।

তা সত্ত্বেও, আমি মান ট্র্যাক করার সিদ্ধান্ত নিয়েছে Log sequence numberএবং Pages flushed up toথেকে "লগ" বিভাগে আউটপুট SHOW ENGINE INNODB STATUSপ্রতি 10 সেকেন্ডে। স্টল চলাকালীন এটি দুটি ফ্ল্যাশিং ক্রিয়াকলাপটি অব্যাহত রয়েছে বলে মনে হচ্ছে যেহেতু দুটি মানের মধ্যে বিস্তার কমছে:

Mon Sep 1 14:17:08 CEST 2014 LSN: 263992263703, Pages flushed: 263973405075, Difference: 18416 K
Mon Sep 1 14:17:19 CEST 2014 LSN: 263992826715, Pages flushed: 263973811282, Difference: 18569 K
Mon Sep 1 14:17:29 CEST 2014 LSN: 263993160647, Pages flushed: 263974544320, Difference: 18180 K
Mon Sep 1 14:17:39 CEST 2014 LSN: 263993539171, Pages flushed: 263974784191, Difference: 18315 K
Mon Sep 1 14:17:49 CEST 2014 LSN: 263993785507, Pages flushed: 263975990474, Difference: 17377 K
Mon Sep 1 14:17:59 CEST 2014 LSN: 263994298172, Pages flushed: 263976855227, Difference: 17034 K
Mon Sep 1 14:18:09 CEST 2014 LSN: 263994670794, Pages flushed: 263978062309, Difference: 16219 K
Mon Sep 1 14:18:19 CEST 2014 LSN: 263995014722, Pages flushed: 263983319652, Difference: 11420 K
Mon Sep 1 14:18:30 CEST 2014 LSN: 263995404674, Pages flushed: 263986138726, Difference: 9048 K
Mon Sep 1 14:18:40 CEST 2014 LSN: 263995718244, Pages flushed: 263988558036, Difference: 6992 K
Mon Sep 1 14:18:50 CEST 2014 LSN: 263996129424, Pages flushed: 263988808179, Difference: 7149 K
Mon Sep 1 14:19:00 CEST 2014 LSN: 263996517064, Pages flushed: 263992009344, Difference: 4402 K
Mon Sep 1 14:19:11 CEST 2014 LSN: 263996979188, Pages flushed: 263993364509, Difference: 3529 K
Mon Sep 1 14:19:21 CEST 2014 LSN: 263998880477, Pages flushed: 263993558842, Difference: 5196 K
Mon Sep 1 14:19:31 CEST 2014 LSN: 264001013381, Pages flushed: 263993568285, Difference: 7270 K
Mon Sep 1 14:19:41 CEST 2014 LSN: 264001933489, Pages flushed: 263993578961, Difference: 8158 K
Mon Sep 1 14:19:51 CEST 2014 LSN: 264004225438, Pages flushed: 263993585459, Difference: 10390 K

এবং 14:19:11 এ বিস্তারটি সর্বনিম্নে পৌঁছেছে, সুতরাং ফ্লাশিং ক্রিয়াকলাপটি এখানে স্টলটির শেষের সাথে মিলে যায় বলে মনে হচ্ছে। তবে এই পয়েন্টগুলি আমাকে কারণ হিসাবে InnoDB লগ ফ্লাশিংকে বরখাস্ত করতে বাধ্য করেছে:

  • ফ্ল্যাশিং অপারেশনের জন্য ডাটাবেসে সমস্ত আপডেট ব্লক করার জন্য এটি "সিঙ্ক্রোনাস" হওয়া দরকার, যার অর্থ লগের //৮ অংশ দখল করতে হবে
  • এটির পূর্বে একটি "অ্যাসিনক্রোনাস" ফ্লাশিং পর্বটি innodb_max_dirty_pages_pctফিল ফিল থেকে শুরু হবে - যা আমি দেখছি না
  • স্টল চলাকালীনও এলএসএনগুলি বাড়তে থাকে, সুতরাং লগ কার্যকলাপ সম্পূর্ণভাবে বন্ধ হয় না
  • মাইআইএসএএম টেবিল INSERT গুলি পাশাপাশি প্রভাবিত হয়
  • অভিযোজিত ফ্লাশিংয়ের জন্য পৃষ্ঠার_সামান্য থ্রেডটি তার কাজ করে মনে হচ্ছে এবং ডিএমএল প্রশ্নগুলি বন্ধ না করে লগগুলিকে ফ্লাশ করছে:

এলএসএন - পেজফ্ল্যাশড

(সংখ্যাগুলি ([Log Sequence Number] - [Pages flushed up to]) / 1024এসেছে SHOW ENGINE INNODB STATUS)

innodb_adaptive_flushing_lwm=1পৃষ্ঠা ক্লিনারটিকে আগের চেয়ে বেশি কাজ করতে বাধ্য করে বিষয়টি সেট করে কিছুটা হ্রাস পেয়েছে বলে মনে হচ্ছে ।

error.logকোন এন্ট্রি স্টল সঙ্গে কাঠে হয়েছে। SHOW INNODB STATUSপ্রায় 24 ঘন্টা অপারেশনের পরে অংশগুলি এর মতো দেখতে:

SEMAPHORES
----------
OS WAIT ARRAY INFO: reservation count 789330
OS WAIT ARRAY INFO: signal count 1424848
Mutex spin waits 269678, rounds 3114657, OS waits 65965
RW-shared spins 941620, rounds 20437223, OS waits 442474
RW-excl spins 451007, rounds 13254440, OS waits 215151
Spin rounds per wait: 11.55 mutex, 21.70 RW-shared, 29.39 RW-excl
------------------------
LATEST DETECTED DEADLOCK
------------------------
2014-09-03 10:33:55 7fe0e2e44700
[...]
--------
FILE I/O
--------
[...]
932635 OS file reads, 2117126 OS file writes, 1193633 OS fsyncs
0.00 reads/s, 0 avg bytes/read, 17.00 writes/s, 1.20 fsyncs/s
--------------
ROW OPERATIONS
--------------
0 queries inside InnoDB, 0 queries in queue
0 read views open inside InnoDB
Main thread process no. 54745, id 140604272338688, state: sleeping
Number of rows inserted 528904, updated 1596758, deleted 99860, read 3325217158
5.40 inserts/s, 10.40 updates/s, 0.00 deletes/s, 122969.21 reads/s

সুতরাং, হ্যাঁ, ডাটাবেসটিতে ডেডলক রয়েছে তবে এগুলি খুব কমই দেখা যাচ্ছে ("সর্বশেষ "টি পরিসংখ্যানগুলি পড়ার প্রায় 11 ঘন্টা আগে পরিচালনা করা হয়েছে)।

আমি একটি নির্দিষ্ট সময়ের মধ্যে "বিশেষত" বিভাগের মানগুলি ট্র্যাক করার চেষ্টা করেছি, বিশেষত স্বাভাবিক ক্রিয়াকলাপের একটি পরিস্থিতিতে এবং স্টলের সময় (আমি একটি ছোট স্ক্রিপ্ট লিখেছিলাম মাইএসকিউএল সার্ভারের প্রসেসলিস্টটি পরীক্ষা করেছিলাম এবং লগ আউটপুটে একাধিক ডায়াগনস্টিক কমান্ড চালিয়ে যাচ্ছিলাম) একটি স্পষ্ট স্টল)। যেহেতু নম্বরগুলি বিভিন্ন সময়ের ফ্রেমের উপরে নেওয়া হয়েছে, তাই ফলাফলগুলিকে ইভেন্ট / সেকেন্ডে আমি স্বাভাবিক করে তুলেছি:

                          normal   stall
                          1h avg  1m avg
OS WAIT ARRAY INFO: 
    reservation count      5,74    1,00
    signal count          24,43    3,17
Mutex spin waits           1,32    5,67
    rounds                 8,33   25,85
    OS waits               0,16    0,43
RW-shared spins            9,52    0,76
    rounds               140,73    13,39
    OS waits               2,60    0,27
RW-excl spins              6,36    1,08
    rounds               178,42   16,51
    OS waits               2,38    0,20

আমি এখানে যা দেখছি সে সম্পর্কে আমি যথেষ্ট নিশ্চিত নই। বেশিরভাগ সংখ্যা একটি মাত্রার ক্রম দ্বারা হ্রাস পেয়েছে - সম্ভবত আপডেট অপারেশন বন্ধ হয়ে যাওয়ার কারণে, "মুটেক্স স্পিন ওয়েটস" এবং "মুটেক্স স্পিন রাউন্ড" তবে উভয়ই 4 এর গুণক দ্বারা বৃদ্ধি পেয়েছে।

এটি আরও তদন্ত করে, মুটেক্সেসের তালিকায় ( SHOW ENGINE INNODB MUTEX) স্টল চলাকালীন পাশাপাশি স্টল চলাকালীন উভয় ক্ষেত্রেই 480 ডলার মুটেক্স এন্ট্রি তালিকাভুক্ত থাকে। innodb_status_output_locksএটি আমাকে আরও বিশদ দিচ্ছে কিনা তা দেখতে আমি সক্ষম হয়েছি।

কনফিগারেশন ভেরিয়েবল

(আমি তাদের বেশিরভাগের সাথে সুনির্দিষ্ট সাফল্য ছাড়াই টিনক করেছি):

mysql> show global variables where variable_name like 'innodb_adaptive_flush%';
+------------------------------+-------+
| Variable_name                | Value |
+------------------------------+-------+
| innodb_adaptive_flushing     | ON    |
| innodb_adaptive_flushing_lwm | 1     |
+------------------------------+-------+
mysql> show global variables where variable_name like 'innodb_max_dirty_pages_pct%';
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| innodb_max_dirty_pages_pct     | 50    |
| innodb_max_dirty_pages_pct_lwm | 10    |
+--------------------------------+-------+
mysql> show global variables where variable_name like 'innodb_log_%';
+-----------------------------+-----------+
| Variable_name               | Value     |
+-----------------------------+-----------+
| innodb_log_buffer_size      | 8388608   |
| innodb_log_compressed_pages | ON        |
| innodb_log_file_size        | 268435456 |
| innodb_log_files_in_group   | 2         |
| innodb_log_group_home_dir   | ./        |
+-----------------------------+-----------+
mysql> show global variables where variable_name like 'innodb_double%';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| innodb_doublewrite | ON    |
+--------------------+-------+
mysql> show global variables where variable_name like 'innodb_buffer_pool%';
+-------------------------------------+----------------+
| Variable_name                       | Value          |
+-------------------------------------+----------------+
| innodb_buffer_pool_dump_at_shutdown | OFF            |
| innodb_buffer_pool_dump_now         | OFF            |
| innodb_buffer_pool_filename         | ib_buffer_pool |
| innodb_buffer_pool_instances        | 8              |
| innodb_buffer_pool_load_abort       | OFF            |
| innodb_buffer_pool_load_at_startup  | OFF            |
| innodb_buffer_pool_load_now         | OFF            |
| innodb_buffer_pool_size             | 29360128000    |
+-------------------------------------+----------------+
mysql> show global variables where variable_name like 'innodb_io_capacity%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| innodb_io_capacity     | 200   |
| innodb_io_capacity_max | 2000  |
+------------------------+-------+
mysql> show global variables where variable_name like 'innodb_lru_scan_depth%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_lru_scan_depth | 1024  |
+-----------------------+-------+

জিনিস ইতিমধ্যে চেষ্টা করা হয়েছে

  • দ্বারা ক্যোয়ারী ক্যাশে অক্ষম করা হচ্ছে SET GLOBAL query_cache_size=0
  • innodb_log_buffer_size128M এ বাড়ছে
  • সঙ্গে প্রায় বাজানো innodb_adaptive_flushing, innodb_max_dirty_pages_pctএবং নিজ নিজ _lwmমান (তারা ডিফল্টে সেট হয়েছিল আমার পরিবর্তনগুলি করার পূর্বে)
  • বৃদ্ধি innodb_io_capacity(2000) এবং innodb_io_capacity_max(4000)
  • স্থাপন innodb_flush_log_at_trx_commit = 2
  • ইনোডাব_ফ্লুশ_মোথোড = ও_ডিআরসিটি দিয়ে চলছে (হ্যাঁ, আমরা অবিচ্ছিন্ন রচনা ক্যাশে একটি সান ব্যবহার করি না)
  • / sys / block / sda / قطار / সময়সূচী নির্ধারণ noopবাdeadline

ইনোডাব_ইও_ক্যাপাসিটি, ইননোডবি_ও_ক্যাপাসিটি_ম্যাক্স এবং ইনানোডবি_আরলু_স্ক্যান_ডেপথের মানগুলি কী? এগুলিকে উচ্চতর (আরও উপযুক্ত) মানগুলিতে সেট করা লগ স্পেসকে মুক্ত রাখতে সহায়তা করে।
মরগান টকার

ডিফল্টস - ২০০, ২০০০ এবং ১০২৪। আমি এখন এগুলি 2000, 4000 এবং 2000 এ পরিবর্তন করেছি এবং এলএসএন এবং পৃষ্ঠাগুলির ফ্ল্যাশ মানগুলির মধ্যে স্প্রেড আবার হ্রাস পেয়েছে <1000 কে। তবে আমি নিশ্চিত নই যে এটি লগের বিষয় কিনা? স্থান প্রথম স্থান।
syneticon-dj

বাস্তবে তা মনে হয় না। আমি এখনও স্টলগুলি দেখছি - সময়কাল বা ঘটনার ফ্রিকোয়েন্সিতে এগুলি খুব বেশি পরিবর্তন হয়নি। আমার এলএসএন / চেকপয়েন্ট লগিং উল্লেখযোগ্যভাবে কম নিরঙ্কুশ স্প্রেড সংখ্যা দেখায় যা স্টল চলাকালীন কিছুটা বেড়ে যায় প্রায় 1-2 এম তে প্রায় 3 এম (সম্ভবত অসমাপ্ত লেনদেনের ফলে ফলশ্রুতিযুক্ত লগ ব্যবহারের ফলে) এবং পরবর্তীকালে সফল ফ্লাশিং এলএসএন-এর মধ্যে শূন্যের কাছাকাছি পৌঁছে যায় successful এবং স্টলটি সমাধান করা হয়েছে এমন সময়ে থেকে শুরু হওয়া চেকপয়েন্ট।
syneticon-dj

আমি নিশ্চিত নই যে আপনার ইনডোডবি_ডাপটিভ_ফ্লুশিং_এলডওয়ামটি 1 তে সেট করা উচিত - এটি লগ স্পেসের একটি শতাংশ, যেখানে অভিযোজিত ফ্লাশিং কিকস ইন (ডিফল্ট: 10)।
মরগান টকার

@ মরগানটোকার এই বিষয়টি নিশ্চিত করার জন্য আমি এটি তৈরি করেছি যে অভিযোজিত ফ্লাশিং বেশিরভাগ সময়ই ফ্লাশ করবে যেহেতু আমার সন্দেহ ছিল যে লগ স্পেসের ব্যবহার সমস্যাটির অংশ ছিল। সমস্যাটি 10 ​​এর ডিফল্ট মান হিসাবেও ঘটেছিল, আমি সমস্যা সমাধানের উদ্দেশ্যে এটি পরিবর্তন করেছি।
syneticon-dj

উত্তর:


6

আমরা একই সংস্করণটি 5.6.12 সংস্করণ এবং 5.6.16 সংস্করণে দুটি সার্ভারে দেখছিলাম যা প্রতিটি দাসের জোড়া রয়েছে। আমরা প্রায় দুই মাস ধরে আপনার মতো স্টাম্পড হয়েছি।

সমাধান :

set global binlog_order_commits = 0;

ভেরিয়েবলের বিশদ জানতে https://dev.mysql.com/doc/refman/5.6/en/replication-options-binary-log.html#sysvar_binlog_order_commits দেখুন ।

ব্যাখ্যা :

InnoDB পূর্ণ-পাঠ্যে একটি ক্যাশে (আকারে ডিফল্ট 8M) ব্যবহার করে যা ডিস্কের প্রকৃত পূর্ণ-পাঠ্য সূচীতে প্রয়োগ করা দরকার be

একবার ক্যাশে ভরে গেলে, ক্যাশে থাকা ডেটা মার্জ করার কাজটি সম্পাদন করার জন্য বেশ কয়েকটি লেনদেন তৈরি করা হয় - এটি প্রচুর পরিমাণে এলোমেলো আইও হতে থাকে, যদি না আপনার সম্পূর্ণ পূর্ণ-পাঠ্য সূচীতে লোড না করা যায় বাফার পুল, এটি একটি দীর্ঘ এবং ধীর লেনদেন।

বিনলগ_অর্ডার_কমিটগুলি সত্যে সেট করা থাকলে, দীর্ঘকাল ধরে চলমান fts_sync_index লেনদেনের পরে সন্নিবেশ এবং আপডেটগুলি সমেত সমস্ত লেনদেনের প্রতিশ্রুতি দেওয়ার আগে এটি শেষ না হওয়া পর্যন্ত অপেক্ষা করতে হবে।

বাইনারি লগিং সক্ষম করা থাকলে এটি কেবলমাত্র একটি সমস্যা


এটি দেখতে অনেকটা মনে হচ্ছে এটি আমি যে ইস্যুটি দেখছিলাম তার সমাধানও হতে পারে। আপনি কীভাবে কর্মসূচীর সাথে এসেছিলেন? এছাড়াও, আমার ক্ষেত্রে সম্পূর্ণ টেক্সট সূচক হবে বাফার পুকুর (যা আকার ~ 30G হয়) মধ্যে মাপসই করা আছে কিন্তু অপারেশন প্রচন্ডভাবে লেটেন্সি-বাউন্ড হতে যাচ্ছিলেন। আমি এই ধারণাটির আওতায় আছি যে মাইএসকিউএল এর আই / ও স্ট্যাকটি স্টোরেজ বিলম্বের সাথে কাজ করার সময় অত্যন্ত অদক্ষ , তাই বাইনারি লগিং কনফিগারেশনের জন্য খারাপ ডিফল্ট সহ অদক্ষতা - এই সমস্যাটি সম্ভবত উভয়ের সংমিশ্রণ।
syneticon-dj

আমি এত অবাক হয়ে কীভাবে এটি নজরে না যেতে পারছি তা অবাকই করি। অবশ্যই, এসএসডি-বিবিহীন স্টোরেজে এফটিএস এবং বিনলগ সক্ষম করে আরও অনেক লোক ইনোডিবি চালাচ্ছেন?
syneticon-dj

ভাগ্য। আমি আপনার মত একই জায়গায় পৌঁছে গিয়েছিলাম, যেখানে আমি লকআপগুলির সময় "শো ইঞ্জিন ইন্নাডব স্থিতি" ক্যাপচার করতে পেরেছিলাম। আমি একটি ছোট প্রোগ্রাম লিখেছি যা এফটিএস সূচক এবং অন্য একটি সারণী আপডেট করে এবং আপডেটের সময়টি রেকর্ড করে একটি টেবিলের সাথে প্রচুর সারি সন্নিবেশ করিয়ে দেবে। আমি আমার স্থানীয় মেশিন এবং লাইভ সার্ভারগুলির মধ্যে একের পর এক সেটআপের পার্থক্যগুলি অতিক্রম না করা অবধি কিছুক্ষণের জন্য আপডেটগুলি ব্লক করতে এফটিএস ক্যাশে ফ্ল্যাশ বিরতি পেতে সক্ষম হয়েছি। বিনলগটি চালু করা বিষয়টিকে পুনরায় তৈরি করেছে যাতে আমি কেবল বিনলগ অপশনগুলি দিয়ে পড়ি।
ড্যানিয়েল গোল্ডিং 19

1
এটি লক্ষণীয় যে মাইএসকিউএল ডেভ টিম অবশেষে (কাতারে 15 মাস পরে!) রিপোর্ট করা বাগের স্থিতিটি "যাচাই" করা হয়েছে এবং দেব দলের অন্ততপক্ষে কেউ সমাধান সম্পর্কে ভাবছেন বলে মনে হচ্ছে। বলা বাহুল্য, আমি মাইএসকিউএল দিয়ে সম্পন্ন করেছি। ভাল জন্য, আমি আশা করি।
syneticon-dj

4

আমাকে সম্ভবত লগ ফ্লাশিং এবং কীভাবে অভিযোজিত ফ্লাশিং কাজ করে তা দিয়ে historicalতিহাসিক সমস্যাটি বর্ণনা করার চেষ্টা করি এবং বর্ণনা করি:

  • পুনরায় লগগুলি একটি রিং বাফার ডিজাইন। এগুলি কেবল সর্বদা লিখিত (কখনও কখনও সাধারণ ক্রিয়াকলাপ থেকে পড়া হয় না) এবং ক্র্যাশ পুনরুদ্ধার সরবরাহ করে। আমি একটি রিং বাফারটি ট্যাঙ্কের চালের অনুরূপ বর্ণনা করতে চাই।

  • ইনোডিবি লগ ফাইল স্পেসটি ওভাররাইট করতে সক্ষম হবে না যদি এতে এমন কিছু পরিবর্তন থাকে যা ডিস্কে এখনও সংশোধন করা হয়নি। Historতিহাসিকভাবে, যা ঘটবে তা হ'ল ইনোডিবি প্রতি সেকেন্ডে নির্দিষ্ট পরিমাণ কাজের চেষ্টা করবে (এর দ্বারা কনফিগার করা innodb_io_capacity) এবং যদি এটি পর্যাপ্ত না হয় তবে আপনি সম্পূর্ণ লগ স্পেসে পৌঁছে যাবেন। হঠাৎ করে ফাঁকা জায়গার জন্য সংলগ্ন ফ্লাশিংয়ের কারণে একটি স্টল দেখা দেবে, যা হঠাৎ করেই পূর্বের পটভূমির কাজ হয়ে থাকে।

  • এই সমস্যাটির সমাধান করার জন্য, অভিযোজিত ফ্লাশিং চালু হয়েছিল। যেখানে 10% (ডিফল্ট) লগ স্পেস গ্রাস করা হয়, পটভূমির কাজটি ক্রমান্বয়ে আরও আক্রমণাত্মক হতে শুরু করে। হ'ল হঠাৎ স্টল না করে এর উদ্দেশ্য হ'ল, আপনার পারফরম্যান্সে আরও একটি 'শর্ট ডিপ' রয়েছে।

  • অভিযোজিত ফ্লাশিং থেকে স্বতন্ত্র, আপনার কাজের চাপের জন্য পর্যাপ্ত লগ স্পেস থাকা গুরুত্বপূর্ণ ( innodb_log_file_size4 জি এর মান এখন বেশ নিরাপদ), এবং এটি নিশ্চিত করুন innodb_io_capacityএবং innodb_lru_scan_depthবাস্তববাদী মানগুলিতে সেট করা আছে তা নিশ্চিত করুন । অভিযোজিত 10% ফ্লাশিং innodb_adaptive_flushing_lwmএমন একটি জিনিস যা আপনি খুব বেশি প্রসারিত করেন না, এটি স্থানের বাইরে প্রতিরক্ষা ব্যবস্থার বেশি।


2

InnoDB কে কেবল কিছু বিতর্ক ত্রাণ আনতে আপনি খেলতে পারেন innodb_purge_threads

মাইএসকিউএল 5.6 এর আগে মাস্টার থ্রেড সমস্ত পৃষ্ঠা ফ্লাশ করে। মাইএসকিউএল 5.6 এ, একটি পৃথক থ্রেড এটি পরিচালনা করতে পারে। innodb_purge_threadsমাইএসকিউএল 5.5 এর ডিফল্ট মানটি সর্বাধিক 1 সহ 0 ছিল My মাইএসকিউএল 5.6 এ, ডিফল্টটি সর্বাধিক 32 এর সাথে 1 হয়।

সেটিং innodb_purge_threadsআসলে কী করে ?

শূন্যহীন মানগুলি এক বা একাধিক পটভূমির থ্রেডগুলিতে খাঁটি অপারেশন পরিচালনা করে, যা স্কোরযোগ্যতা উন্নত করে InnoDB এর মধ্যে অভ্যন্তরীণ বিরোধকে হ্রাস করতে পারে। 1 এর চেয়ে বেশিতে মান বৃদ্ধি করা অনেকগুলি পৃথক খাঁজির থ্রেড তৈরি করে, যা DML অপারেশনগুলি একাধিক টেবিলে সঞ্চালিত হয় এমন সিস্টেমে দক্ষতা উন্নত করতে পারে।

আমি ইনোডাব_পুর্জ_থ্রেডগুলি 4 এ সেট করে শুরু করব এবং দেখি InnoDB পৃষ্ঠা ফ্লাশিং হ্রাস পেয়েছে কিনা।

আপডেট 2014-09-02 12:33 ইডিটি

মরগান টকার নীচের মন্তব্যে উল্লেখ করেছেন যে পৃষ্ঠা ক্লিনারটি ক্ষতিগ্রস্থ এবং মাইএসকিউএল ৫.7 এটি সমাধান করতে পারে । তবুও, আপনার অবস্থা মাইএসকিউএল 5.6 এ রয়েছে।

আমি দ্বিতীয়বার দেখেছি এবং লক্ষ্য করেছি যে আপনি 50 এ ইন্ডিওডবি_ম্যাক্স_ডার্টি_পেজ_প্যাক্ট করেছেন।

মাইএসকিউএল 5.5+ এ ইনোডাব_ম্যাক্স_ডার্টি_পেজ_প্যাক্টের জন্য ডিফল্ট 75 টি it আমি তিনটি (3) জিনিস করব

আপডেট 2014-09-03 11:06 ইডিটি

আপনার ফ্লাশিং আচরণ পরিবর্তন করার প্রয়োজন হতে পারে

নিম্নলিখিতটি গতিশীলভাবে সেট করার চেষ্টা করুন

SET GLOBAL flush = 1;
SET GLOBAL flush_time = 10;

এই ভেরিয়েবলগুলি, ফ্লাশ এবং ফ্লাশ_টাইম প্রতি 10 সেকেন্ডে টেবিলগুলিতে খোলা ফাইল হ্যান্ডলগুলি বন্ধ করে ফ্লাশিংকে আরও আক্রমণাত্মক করে তুলবে। মাইআইএসএএম অবশ্যই এটি থেকে উপকৃত হতে পারে কারণ এটি ডেটা ক্যাশে করে না। মাইআইএসএএম টেবিলগুলিতে সমস্ত লেখার জন্য পূর্ণ টেবিল লক প্রয়োজন হয়, পরমাণু লেখাগুলি অনুসরণ করে এবং ডিস্ক পরিবর্তনের জন্য ওএসের উপর নির্ভর করে।

InnoDB সেভাবে ফ্লাশ করার জন্য একটি মাইএসকিএল পুনঃসূচনা প্রয়োজন। দেখার বিকল্পগুলি হ'ল ইনোডাব_ফ্লুশ_লগ_আট_আরএক্সএক্স_কমিট এবং ইনোডাব_ফ্লুশ_মোথড

পুনরায় চালু করার আগে দয়া করে এগুলি যুক্ত করুন

[mysqld]
flush = 1
flush_time = 10
innodb_flush_log_at_trx_commit = 0
innodb_flush_method = O_DIRECT

এই রুটে যাওয়ার আগে আপনার জার্নালিং কোনও সমস্যা কিনা তা পরীক্ষা করা উচিত। আমি দেখতে পেয়েছি যে O_DIRECT- এ এই দুর্দান্ত মাইএসকিপ্লিরফর্মব্লগ পোস্টটি কার্নেলের কারণে নকল হচ্ছে। একই পোস্টে মাইআইএসএএম প্রভাবিত হওয়ার কথাও উল্লেখ করেছে।

আমি এই পোস্টটি সম্পর্কে আগে লিখেছিলাম: ইব_লগফাইল ওএসওয়াইএনসি দিয়ে খোলা হয়েছে যখন ইনোডাব_ফ্লুশ_মোথোড = ও_ডিএসইএনসি

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


1
স্পষ্ট করার জন্য: আমি বিশ্বাস করি যে এই কাজের চাপটি থ্রেডগুলি পরিষ্কার করার চেয়ে পৃষ্ঠার ক্লিনার থ্রেডগুলিকে চাপ দেয়। একাধিক পৃষ্ঠা ক্লিনার একটি 5.7 বৈশিষ্ট্য, তবে আরও কনফিগারেশন এখনও 5.6 এ সম্ভব। দেখুন: mysqlserverteam.com/mysql-5-7-improves-dml-oriented-workloads
মরগান টকার

@ মরগানটোকার @ রোল্যান্ডো মাইএসকিউএলডিবিএ আমার কাছে sar -dআউটপুটটিতে দাঁড়িয়ে একটি বিষয় যে থ্রুটপুট awaitড্রপ করার সময় একটি স্টলে প্রায় দশগুণ বাড়ছে । আপনি কি মনে করেন যে এখানে সম্ভবত মাইএসকিউএল এর বাইরে সমস্যা রয়েছে, উদাহরণস্বরূপ আই / ও সিডিউলার বা ফাইল সিস্টেম জার্নালিংয়ের সাথে?
জেমস এল

আমি ইনোডাব_পুর্জ_থ্রেডগুলি (যার পুনঃসূচনা প্রয়োজন) বাদে আপনি প্রস্তাবিত বেশিরভাগ পরামিতিগুলি পরিবর্তন করার মাধ্যমে যাচ্ছি। ইস্যুটির জন্য এটি খুব একটা করেনি। এবং আমি বিশ্বাস করতে পরিচালিত হলাম যে মাইআইএসএএম টেবিল সন্নিবেশগুলিও স্টল হওয়ায় ইনোডিবি ইঞ্জিন এখানে সমস্যা নয়।
syneticon-dj

দয়া করে ইনোডাব_ড্রেড_ও_থ্রেডস এবং ইনানোডব_রাইট_আইও_থ্রেডগুলির জন্য আপনার সেটিংস পোস্ট করুন। রানSHOW GLOBAL VARIABLES LIKE '%io_threads';
RolandoMySQLDBA

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