INNODB Performans Sızıntısı nerede?


11

Düzeltemediğim garip bir sorunum var. Ben bir Sunucu / DB Yönetici daha bir web programcısı değilim, bu yüzden umarım burada birisi bana yardımcı olabilir.

Durum

Ben bir sürü işleyen bir sistem üzerinde çalışıyorum update, insertve deleteistekleri. Bu nedenle, satır kilitleme özelliği için depolama motorum olarak INNODB'i seçtim. Farklı sunuculardaki çalışmalarımızı paralel hale getirmek için Gearman'ı kullanarak her 10 dakikada bir 60.000 kaydı güncelliyoruz. Kod PHP'de ve Zend Framework kullanıyoruz.

Sorun

SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction

Yukarıdaki hatayı neredeyse her 30 dakikada bir, Gearman çalışanlarımızdan birinden alıyoruz.

mysql_report

MySQL 5.1.63-0+squeeze1  uptime 15 9:52:12      Tue Sep 11 21:25:23 2012

__ Key _________________________________________________________________
Buffer used    55.00k of  16.00M  %Used:   0.34
  Current       2.92M            %Usage:  18.24
Write hit      99.95%
Read hit      100.00%

__ Questions ___________________________________________________________
Total         122.05M    91.7/s
  DMS         106.63M    80.1/s  %Total:  87.37
  Com_         10.23M     7.7/s            8.38
  COM_QUIT      4.05M     3.0/s            3.32
  QC Hits       1.09M     0.8/s            0.90
  +Unknown     47.77k     0.0/s            0.04
Slow 2 s       11.14M     8.4/s            9.13  %DMS:  10.45  Log:  ON
DMS           106.63M    80.1/s           87.37
  INSERT       69.21M    52.0/s           56.70         64.90
  UPDATE       22.94M    17.2/s           18.79         21.51
  DELETE       11.19M     8.4/s            9.17         10.49
  SELECT        3.30M     2.5/s            2.70          3.09
  REPLACE           0       0/s            0.00          0.00
Com_           10.23M     7.7/s            8.38
  set_option    4.11M     3.1/s            3.37
  show_fields   3.44M     2.6/s            2.82
  begin         1.33M     1.0/s            1.09

__ SELECT and Sort _____________________________________________________
Scan            4.31M     3.2/s %SELECT: 130.57
Range              52     0.0/s            0.00
Full join          24     0.0/s            0.00
Range check         0       0/s            0.00
Full rng join       1     0.0/s            0.00
Sort scan      31.98k     0.0/s
Sort range      2.05M     1.5/s
Sort mrg pass       0       0/s

__ Query Cache _________________________________________________________
Memory usage  849.84k of  16.00M  %Used:   5.19
Block Fragmnt   1.57%
Hits            1.09M     0.8/s
Inserts         2.52M     1.9/s
Insrt:Prune   1.83k:1     1.9/s
Hit:Insert     0.43:1

__ Table Locks _________________________________________________________
Waited            764     0.0/s  %Total:   0.00
Immediate     106.63M    80.1/s

__ Tables ______________________________________________________________
Open              128 of  128    %Cache: 100.00
Opened          4.82k     0.0/s

__ Connections _________________________________________________________
Max used          301 of  300      %Max: 100.33
Total           4.05M     3.0/s

__ Created Temp ________________________________________________________
Disk table      3.44M     2.6/s
Table           3.44M     2.6/s    Size:  32.0M
File                5     0.0/s

__ Threads _____________________________________________________________
Running            20 of   89
Cached              4 of    8      %Hit:  97.29
Created       109.59k     0.1/s
Slow                0       0/s

__ Aborted _____________________________________________________________
Clients         2.95k     0.0/s
Connects        3.22k     0.0/s

__ Bytes _______________________________________________________________
Sent           13.61G   10.2k/s
Received       26.90G   20.2k/s

__ InnoDB Buffer Pool __________________________________________________
Usage          89.62M of   1.46G  %Used:   5.97
Read hit      100.00%
Pages
  Free         90.26k            %Total:  94.03
  Data          5.24k                      5.46 %Drty:   2.79
  Misc            498                      0.52
  Latched           0                      0.00
Reads         728.62G  547.2k/s
  From file       816     0.0/s            0.00
  Ahead Rnd         3     0.0/s
  Ahead Sql        27     0.0/s
Writes        715.15M   537.1/s
Flushes        11.91M     8.9/s
Wait Free           0       0/s

__ InnoDB Lock _________________________________________________________
Waits         1008791     0.8/s
Current            18
Time acquiring
  Total     184022524 ms
  Average       18241 ms
  Max           59096 ms

__ InnoDB Data, Pages, Rows ____________________________________________
Data
  Reads           919     0.0/s
  Writes       14.17M    10.6/s
  fsync         7.40M     5.6/s
  Pending
    Reads           0
    Writes          0
    fsync           0

Pages
  Created      43.90k     0.0/s
  Read          2.64k     0.0/s
  Written      11.91M     8.9/s

Rows
  Deleted      47.34M    35.6/s
  Inserted     49.70M    37.3/s
  Read        639.52G  480.3k/s
  Updated      56.33M    42.3/s

Kod

$this->db->beginTransaction();

        try {
            for($i = 0; $i < count($products); $i++)
            {
                $this->db->query("UPDATE userproducts SET lowest_price= :p1, last_lowest_price_update='".date("Y-m-d H:i:s", time())."' WHERE product_id = :p2", array(
'p1' => $products[$i]['price_total_end'][1],
'p2' => $products[$i]['asin']));
            }
            $this->db->commit();
        } catch (Exception $e) {
            $this->db->rollBack();
            echo $e->getMessage();
        }
        $this->db->closeConnection();

Bir tabloyu güncellemek için Kod budur. Başka bir tabloyu güncellemek için benzer görünümlü kodlarımız var. Yukarıdaki kod ile, bu yöntem her çağrıldığında 50 istekte bulunuyoruz, bu da yaklaşık 20 işçi tarafından her 30 saniyede bir olacak.

Daha fazla bilgi

mysqladmin status

Uptime: 6770  Threads: 109  Questions: 857696  Slow queries: 52469  Opens: 1382  Flush tables: 1  Open tables: 128  Queries per second avg: 126.690

mysql> SHOW STATUS LIKE 'Open%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| Open_files               | 21    |
| Open_streams             | 0     |
| Open_table_definitions   | 230   |
| Open_tables              | 128   |
| Opened_files             | 71653 |
| Opened_table_definitions | 0     |
| Opened_tables            | 0     |
+--------------------------+-------+
7 rows in set (0.00 sec)

mysql> SHOW CREATE TABLE userproducts\G
*************************** 1. row ***************************
       Table: userproducts
Create Table: CREATE TABLE `userproducts` (
  `id` int(20) NOT NULL AUTO_INCREMENT,
  `userinfos_id` int(12) NOT NULL,
  `seller_sku` varchar(35) COLLATE utf8_bin NOT NULL,
  `product_id` varchar(20) COLLATE utf8_bin NOT NULL,
  `price` float(8,2) NOT NULL,
  `shipping` float(6,2) NOT NULL DEFAULT '0.00',
  `alter_preis` float(8,2) DEFAULT NULL,
  `ek_price` float(8,2) NOT NULL DEFAULT '-1.00',
  `quantity` int(5) NOT NULL DEFAULT '0',
  `lowest_price` float(8,2) DEFAULT NULL,
  `titel` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT 'n/a',
  `url` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `sales_rank` int(8) DEFAULT NULL,
  `kategorie` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `kategorie_2` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `kategorie_3` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `optimierung` int(1) NOT NULL DEFAULT '0',
  `indi` int(1) DEFAULT '0',
  `akt_festpreis` int(1) DEFAULT '0',
  `new` int(1) DEFAULT '1',
  `locked` int(1) DEFAULT '0',
  `determined` int(1) DEFAULT '0',
  `deleted` tinyint(1) NOT NULL DEFAULT '0',
  `a_m_preis` float(8,2) DEFAULT NULL,
  `a_h_preis` float(8,2) DEFAULT NULL,
  `m_preis` float(8,2) NOT NULL DEFAULT '0.00',
  `h_preis` float(8,2) NOT NULL DEFAULT '0.00',
  `preisabstand` float(6,2) DEFAULT '0.00',
  `preisabstand_art` varchar(12) COLLATE utf8_bin DEFAULT 'euro',
  `festpreis` float(8,2) DEFAULT '0.00',
  `last_update` datetime NOT NULL,
  `last_lowest_price_update` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `seller_sku_by_seller` (`userinfos_id`,`seller_sku`),
  KEY `userinfos_id` (`userinfos_id`)
) ENGINE=InnoDB AUTO_INCREMENT=32301793 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
1 row in set (0.00 sec)

mysql> SHOW GLOBAL VARIABLES LIKE 'innodb%'\G
*************************** 1. row ***************************
Variable_name: innodb_adaptive_hash_index
        Value: ON
*************************** 2. row ***************************
Variable_name: innodb_additional_mem_pool_size
        Value: 104857600
*************************** 3. row ***************************
Variable_name: innodb_autoextend_increment
        Value: 8
*************************** 4. row ***************************
Variable_name: innodb_autoinc_lock_mode
        Value: 1
*************************** 5. row ***************************
Variable_name: innodb_buffer_pool_size
        Value: 1572864000
*************************** 6. row ***************************
Variable_name: innodb_checksums
        Value: ON
*************************** 7. row ***************************
Variable_name: innodb_commit_concurrency
        Value: 0
*************************** 8. row ***************************
Variable_name: innodb_concurrency_tickets
        Value: 500
*************************** 9. row ***************************
Variable_name: innodb_data_file_path
        Value: ibdata1:1G;ibdata2:1G;ibdata3:1G:autoextend
*************************** 10. row ***************************
Variable_name: innodb_data_home_dir
        Value: /var/lib/mysql/
*************************** 11. row ***************************
Variable_name: innodb_doublewrite
        Value: ON
*************************** 12. row ***************************
Variable_name: innodb_fast_shutdown
        Value: 1
*************************** 13. row ***************************
Variable_name: innodb_file_io_threads
        Value: 4
*************************** 14. row ***************************
Variable_name: innodb_file_per_table
        Value: ON
*************************** 15. row ***************************
Variable_name: innodb_flush_log_at_trx_commit
        Value: 1
*************************** 16. row ***************************
Variable_name: innodb_flush_method
        Value: 
*************************** 17. row ***************************
Variable_name: innodb_force_recovery
        Value: 0
*************************** 18. row ***************************
Variable_name: innodb_lock_wait_timeout
        Value: 50
*************************** 19. row ***************************
Variable_name: innodb_locks_unsafe_for_binlog
        Value: OFF
*************************** 20. row ***************************
Variable_name: innodb_log_buffer_size
        Value: 26214400
*************************** 21. row ***************************
Variable_name: innodb_log_file_size
        Value: 314572800
*************************** 22. row ***************************
Variable_name: innodb_log_files_in_group
        Value: 2
*************************** 23. row ***************************
Variable_name: innodb_log_group_home_dir
        Value: ./
*************************** 24. row ***************************
Variable_name: innodb_max_dirty_pages_pct
        Value: 90
*************************** 25. row ***************************
Variable_name: innodb_max_purge_lag
        Value: 0
*************************** 26. row ***************************
Variable_name: innodb_mirrored_log_groups
        Value: 1
*************************** 27. row ***************************
Variable_name: innodb_open_files
        Value: 300
*************************** 28. row ***************************
Variable_name: innodb_rollback_on_timeout
        Value: OFF
*************************** 29. row ***************************
Variable_name: innodb_stats_method
        Value: nulls_equal
*************************** 30. row ***************************
Variable_name: innodb_stats_on_metadata
        Value: ON
*************************** 31. row ***************************
Variable_name: innodb_support_xa
        Value: ON
*************************** 32. row ***************************
Variable_name: innodb_sync_spin_loops
        Value: 20
*************************** 33. row ***************************
Variable_name: innodb_table_locks
        Value: ON
*************************** 34. row ***************************
Variable_name: innodb_thread_concurrency
        Value: 8
*************************** 35. row ***************************
Variable_name: innodb_thread_sleep_delay
        Value: 10000
*************************** 36. row ***************************
Variable_name: innodb_use_legacy_cardinality_algorithm
        Value: ON
36 rows in set (0.00 sec)

mysql> SHOW ENGINE INNODB STATUS\G
*************************** 1. row ***************************
  Type: InnoDB
  Name: 
Status: 
=====================================
120912 17:15:21 INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 37 seconds
----------
SEMAPHORES
----------
OS WAIT ARRAY INFO: reservation count 257219, signal count 242756
--Thread 47843758212864 has waited at ../../../storage/innobase/lock/lock0lock.c line 5108 for 0.00 seconds the semaphore:
Mutex at 0x2b82ed8712b8 created file ../../../storage/innobase/srv/srv0srv.c line 891, lock var 0
waiters flag 0
Mutex spin waits 0, rounds 125510621, OS waits 136209
RW-shared spins 100480, OS waits 14880; RW-excl spins 164568, OS waits 4813
------------------------
LATEST DETECTED DEADLOCK
------------------------
120912 17:14:59
*** (1) TRANSACTION:
TRANSACTION 0 20639503, ACTIVE 8 sec, process no 1655, OS thread id 47843745568512 fetching rows
mysql tables in use 1, locked 1
LOCK WAIT 700 lock struct(s), heap size 63472, 38097 row lock(s), undo log entries 2
MySQL thread id 99112, query id 2086869 s16468810.onlinehome-server.info 87.106.82.83 web0 Updating
UPDATE userproducts SET lowest_price=44.9, last_lowest_price_update='2012-09-12 17:14:53' WHERE product_id LIKE 'B007J20HN2'
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 631 page no 985 n bits 136 index `PRIMARY` of table `usr_web0_1`.`userproducts` trx id 0 20639503 lock_mode X waiting
Record lock, heap no 60 PHYSICAL RECORD: n_fields 34; compact format; info bits 0
 [SOME STRANGE CHARAKTERS LIKE ABOVE]

*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 631 page no 985 n bits 136 index `PRIMARY` of table `usr_web0_1`.`userproducts` trx id 0 20639496 lock_mode X locks rec but not gap waiting
Record lock, heap no 59 PHYSICAL RECORD: n_fields 34; compact format; info bits 0
 0: len 4; hex 815d9f43; asc  ] C;; 1: len 6; hex 0000013ae793; asc    :  ;; 2: len 7; hex 000000002d01e9; asc     -  ;; 3: len 4; hex 80006f9a; asc   o ;; 4: len 12; hex 30302d3956335a2d47555a34; asc 00-9V3Z-GUZ4;; 5: len 10; hex 42303032414c38463732; asc B002AL8F72;; 6: len 4; hex cdccdb42; asc    B;; 7: len 4; hex 00000000; asc     ;; 8: len 4; hex cdccdb42; asc    B;; 9: len 4; hex 000080bf; asc     ;; 10: len 4; hex 800003e7; asc     ;; 11: len 4; hex cdccdb42; asc    B;; 12: len 30; hex 537572706c75732056696e74616765204a61636b65204d36352052656769; asc Surplus Vintage Jacke M65 Regi;...(truncated); 13: len 30; hex 687474703a2f2f6563782e696d616765732d616d617a6f6e2e636f6d2f69; asc http://ecx.images-amazon.com/i;...(truncated); 14: len 4; hex 800034c5; asc   4 ;; 15: len 10; hex 42656b6c656964756e67; asc Bekleidung;; 16: len 3; hex 4e2f41; asc N/A;; 17: len 3; hex 4e2f41; asc N/A;; 18: len 4; hex 80000000; asc     ;; 19: len 4; hex 80000000; asc     ;; 20: len 4; hex 80000000; asc     ;; 21: len 4; hex 80000000; asc     ;; 22: len 4; hex 80000000; asc     ;; 23: len 4; hex 80000000; asc     ;; 24: len 1; hex 80; asc  ;; 25: SQL NULL; 26: SQL NULL; 27: len 4; hex 00000000; asc     ;; 28: len 4; hex 00000000; asc     ;; 29: len 4; hex 00000000; asc     ;; 30: len 4; hex 6575726f; asc euro;; 31: len 4; hex 00000000; asc     ;; 32: len 8; hex 8000124cc3d28e8a; asc    L    ;; 33: len 8; hex 8000124cc3d28fc6; asc    L    ;;

*** WE ROLL BACK TRANSACTION (1)
------------
TRANSACTIONS
------------
Trx id counter 0 20639610
Purge done for trx's n:o < 0 20639595 undo n:o < 0 0
History list length 4
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 0 0, not started, process no 1655, OS thread id 47843726903040
MySQL thread id 99216, query id 2090678 localhost root
SHOW ENGINE INNODB STATUS
---TRANSACTION 0 20639607, not started, process no 1655, OS thread id 47843746371328
--- [ SOME MORE LIKE THESE ] 
---TRANSACTION 0 20527676, not started, process no 1655, OS thread id 47843739748096
MySQL thread id 1340, query id 5247 s16468807.onlinehome-server.info 87.106.72.226 web0
---TRANSACTION 0 20639609, ACTIVE 0 sec, process no 1655, OS thread id 47843728910080 starting index read
mysql tables in use 1, locked 1
LOCK WAIT 3 lock struct(s), heap size 1216, 2 row lock(s)
MySQL thread id 99095, query id 2090662 s16468809.onlinehome-server.info 87.106.82.94 web0 Updating
UPDATE `userproducts` SET `locked` = '0' WHERE (userinfos_id = '28565')
------- TRX HAS BEEN WAITING 0 SEC FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 631 page no 985 n bits 136 index `PRIMARY` of table `usr_web0_1`.`userproducts` trx id 0 20639609 lock_mode X locks rec but not gap waiting
Record lock, heap no 57 PHYSICAL RECORD: n_fields 34; compact format; info bits 0
 0: len 4; hex 8158219b; asc  X! ;; 1: len 6; hex 0000013aeebe; asc    :  ;; 2: len 7; hex 000000003208b2; asc     2  ;; 3: len 4; hex 80006f95; asc   o ;; 4: len 12; hex 32592d50484d342d54475458; asc 2Y-PHM4-TGTX;; 5: len 10; hex 42303031314246525832; asc B0011BFRX2;; 6: len 4; hex 00004040; asc   @@;; 7: len 4; hex 00004040; asc   @@;; 8: len 4; hex 00004040; asc   @@;; 9: len 4; hex 000080bf; asc     ;; 10: len 4; hex 80000001; asc     ;; 11: len 4; hex 33330741; asc 33 A;; 12: len 21; hex 5b556e62656b616e6e7465722045696e62616e645d; asc [Unbekannter Einband];; 13: len 30; hex 687474703a2f2f6563782e696d616765732d616d617a6f6e2e636f6d2f69; asc http://ecx.images-amazon.com/i;...(truncated); 14: len 4; hex 800d67f7; asc   g ;; 15: len 1; hex 42; asc B;; 16: len 3; hex 4e2f41; asc N/A;; 17: len 3; hex 4e2f41; asc N/A;; 18: len 4; hex 80000000; asc     ;; 19: len 4; hex 80000000; asc     ;; 20: len 4; hex 80000000; asc     ;; 21: len 4; hex 80000000; asc     ;; 22: len 4; hex 80000000; asc     ;; 23: len 4; hex 80000000; asc     ;; 24: len 1; hex 80; asc  ;; 25: SQL NULL; 26: SQL NULL; 27: len 4; hex 00000000; asc     ;; 28: len 4; hex 00000000; asc     ;; 29: len 4; hex 00000000; asc     ;; 30: len 4; hex 6575726f; asc euro;; 31: len 4; hex 00000000; asc     ;; 32: len 8; hex 8000124cc3758ea7; asc    L u  ;; 33: len 8; hex 8000124cc3d291b5; asc    L    ;;

------------------

[SOME MORE OF THESE]

------------------
---TRANSACTION 0 20639544, ACTIVE 22 sec, process no 1655, OS thread id 47843758212864 fetching rows, thread declared inside InnoDB 158
mysql tables in use 1, locked 1
60 lock struct(s), heap size 6752, 5861 row lock(s), undo log entries 29
MySQL thread id 99161, query id 2090677 s16468810.onlinehome-server.info 87.106.82.83 web0 Updating
UPDATE userproducts SET shipping=0, last_lowest_price_update='2012-09-12 17:15:22' WHERE product_id LIKE 'B00851I800' AND userinfos_id=28570
---TRANSACTION 0 20639538, ACTIVE 24 sec, process no 1655, OS thread id 47843733726976 starting index read
mysql tables in use 1, locked 1
LOCK WAIT 2 lock struct(s), heap size 368, 1 row lock(s)
MySQL thread id 99159, query id 2088002 s16468808.onlinehome-server.info 87.106.82.91 web0 Updating
UPDATE userproducts SET lowest_price=10.69, last_lowest_price_update='2012-09-12 17:14:59' WHERE product_id LIKE 'B0065JFS2U'
------- TRX HAS BEEN WAITING 24 SEC FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 631 page no 6 n bits 120 index `PRIMARY` of table `usr_web0_1`.`userproducts` trx id 0 20639538 lock_mode X waiting
Record lock, heap no 2 PHYSICAL RECORD: n_fields 34; compact format; info bits 0
 [ SAME STRANGE CHARAKTERS]

------------------
---TRANSACTION 0 20639510, ACTIVE 29 sec, process no 1655, OS thread id 47843554330368 starting index read
mysql tables in use 1, locked 1
LOCK WAIT 2 lock struct(s), heap size 368, 1 row lock(s)
MySQL thread id 99119, query id 2086898 s16468808.onlinehome-server.info 87.106.82.91 web0 Updating
UPDATE userproducts SET lowest_price=50.8, last_lowest_price_update='2012-09-12 17:14:53' WHERE product_id LIKE 'B002MPPOUC'
------- TRX HAS BEEN WAITING 29 SEC FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 631 page no 6 n bits 120 index `PRIMARY` of table `usr_web0_1`.`userproducts` trx id 0 20639510 lock_mode X waiting
Record lock, heap no 2 PHYSICAL RECORD: n_fields 34; compact format; info bits 0
 0: len 4; hex 8000bb1d; asc     ;; 1: len 6; hex 000001394831; asc    9H1;; 2: len 7; hex 000000003409ad; asc     4  ;; 3: len 4; hex 80000003; asc     ;; 4: len 12; hex 30302d364f4e4a2d48305039; asc 00-6ONJ-H0P9;; 5: len 10; hex 42303037523531533241; asc B007R51S2A;; 6: len 4; hex d7e34243; asc   BC;; 7: len 4; hex 00000000; asc     ;; 8: len 4; hex d7e34243; asc   BC;; 9: len 4; hex 000080bf; asc     ;; 10: len 4; hex 80000003; asc     ;; 11: len 4; hex d7e34243; asc   BC;; 12: len 30; hex 54616765736465636b65206f646572204b697373656e2041746963612037; asc Tagesdecke oder Kissen Atica 7;...(truncated); 13: len 30; hex 687474703a2f2f6563782e696d616765732d616d617a6f6e2e636f6d2f69; asc http://ecx.images-amazon.com/i;...(truncated); 14: len 4; hex 800c7b52; asc   {R;; 15: len 1; hex 4b; asc K;; 16: len 3; hex 4e2f41; asc N/A;; 17: len 3; hex 4e2f41; asc N/A;; 18: len 4; hex 80000001; asc     ;; 19: len 4; hex 80000000; asc     ;; 20: len 4; hex 80000000; asc     ;; 21: len 4; hex 80000000; asc     ;; 22: len 4; hex 80000000; asc     ;; 23: len 4; hex 80000000; asc     ;; 24: len 1; hex 80; asc  ;; 25: SQL NULL; 26: SQL NULL; 27: len 4; hex 00000000; asc     ;; 28: len 4; hex 00000000; asc     ;; 29: len 4; hex 00000000; asc     ;; 30: len 4; hex 6575726f; asc euro;; 31: len 4; hex 00000000; asc     ;; 32: len 8; hex 8000124cc3b3ba08; asc    L    ;; 33: len 8; hex 8000124cc3d1d42c; asc    L   ,;;

------------------
---TRANSACTION 0 20639508, ACTIVE 30 sec, process no 1655, OS thread id 47843558143744 fetching rows
mysql tables in use 1, locked 1
LOCK WAIT 700 lock struct(s), heap size 63472, 38096 row lock(s)
MySQL thread id 99117, query id 2086890 s16468810.onlinehome-server.info 87.106.82.83 web0 Updating
UPDATE userproducts SET lowest_price=109.9, last_lowest_price_update='2012-09-12 17:14:53' WHERE product_id LIKE 'B002AL8F72'
------- TRX HAS BEEN WAITING 1 SEC FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 631 page no 985 n bits 136 index `PRIMARY` of table `usr_web0_1`.`userproducts` trx id 0 20639508 lock_mode X waiting
Record lock, heap no 59 PHYSICAL RECORD: n_fields 34; compact format; info bits 0
 0: len 4; hex 815d9f43; asc  ] C;; 1: len 6; hex 0000013aef08; asc    :  ;; 2: len 7; hex 00000000391358; asc     9 X;; 3: len 4; hex 80006f9a; asc   o ;; 4: len 12; hex 30302d3956335a2d47555a34; asc 00-9V3Z-GUZ4;; 5: len 10; hex 42303032414c38463732; asc B002AL8F72;; 6: len 4; hex cdccdb42; asc    B;; 7: len 4; hex 00000000; asc     ;; 8: len 4; hex cdccdb42; asc    B;; 9: len 4; hex 000080bf; asc     ;; 10: len 4; hex 800003e7; asc     ;; 11: len 4; hex cdccdb42; asc    B;; 12: len 30; hex 537572706c75732056696e74616765204a61636b65204d36352052656769; asc Surplus Vintage Jacke M65 Regi;...(truncated); 13: len 30; hex 687474703a2f2f6563782e696d616765732d616d617a6f6e2e636f6d2f69; asc http://ecx.images-amazon.com/i;...(truncated); 14: len 4; hex 800034c5; asc   4 ;; 15: len 10; hex 42656b6c656964756e67; asc Bekleidung;; 16: len 3; hex 4e2f41; asc N/A;; 17: len 3; hex 4e2f41; asc N/A;; 18: len 4; hex 80000000; asc     ;; 19: len 4; hex 80000000; asc     ;; 20: len 4; hex 80000000; asc     ;; 21: len 4; hex 80000000; asc     ;; 22: len 4; hex 80000000; asc     ;; 23: len 4; hex 80000000; asc     ;; 24: len 1; hex 80; asc  ;; 25: SQL NULL; 26: SQL NULL; 27: len 4; hex 00000000; asc     ;; 28: len 4; hex 00000000; asc     ;; 29: len 4; hex 00000000; asc     ;; 30: len 4; hex 6575726f; asc euro;; 31: len 4; hex 00000000; asc     ;; 32: len 8; hex 8000124cc3d291ec; asc    L    ;; 33: len 8; hex 8000124cc3d28fc6; asc    L    ;;

------------------
--------
FILE I/O
--------
I/O thread 0 state: waiting for i/o request (insert buffer thread)
I/O thread 1 state: waiting for i/o request (log thread)
I/O thread 2 state: waiting for i/o request (read thread)
I/O thread 3 state: waiting for i/o request (write thread)
Pending normal aio reads: 0, aio writes: 0,
 ibuf aio reads: 0, log i/o's: 0, sync i/o's: 0
Pending flushes (fsync) log: 0; buffer pool: 0
2714 OS file reads, 202235 OS file writes, 95816 OS fsyncs
0.00 reads/s, 0 avg bytes/read, 8.70 writes/s, 4.68 fsyncs/s
-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 0, seg size 2,
0 inserts, 0 merged recs, 0 merges
Hash table size 3112859, node heap has 344 buffer(s)
7394.83 hash searches/s, 930.22 non-hash searches/s
---
LOG
---
Log sequence number 14 2880311684
Log flushed up to   14 2880309944
Last checkpoint at  14 2880298289
0 pending log writes, 0 pending chkp writes
83150 log i/o's done, 3.89 log i/o's/second
----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 1884360120; in additional pool allocated 21052672
Dictionary memory allocated 1087464
Buffer pool size   96000
Free buffers       90835
Database pages     4818
Modified db pages  26
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages read 4102, created 716, written 187723
0.00 reads/s, 0.00 creates/s, 8.05 writes/s
Buffer pool hit rate 1000 / 1000
--------------
ROW OPERATIONS
--------------
1 queries inside InnoDB, 0 queries in queue
1 read views open inside InnoDB
Main thread process no. 1655, id 47843546388224, state: sleeping
Number of rows inserted 844694, updated 784400, deleted 836993, read 11188899916
15.40 inserts/s, 87.40 updates/s, 12.51 deletes/s, 253212.99 reads/s
----------------------------
END OF INNODB MONITOR OUTPUT
============================

1 row in set (0.01 sec)

Sorular

Bu raporda ne garip görünüyor? Bana göre, hafızamız tükeniyormuş gibi görünmüyor.

Anlamadığım şey InnoDB Verileri Pages, Rows > Rows > Read. Neden saniyede 480.000 Okuma var? Bu ne anlama geliyor? Bana öyle geliyor ki saniyede sadece 42 güncelleme var, ki bu o kadar hızlı değil.

Açık tablolar veya dosyalar hakkında. Bu normal bir değer mi? Bu konuda deneyimim yoktu.

Bir şey beklendiği gibi çalışmıyor ve buradaki birinin onu bulmama yardımcı olabileceğini umuyorum.


SHOW ENGINE INNODB STATUS;Çıktıda herhangi bir DEADLOCK gördünüz mü ?
quanta

Hayır! Hiçbir şey görülmedi.
M.Hirn

1) Lütfen çıktısını gönderin SHOW CREATE TABLE userproducts\G, 2) Lütfen çıktısını gönderin SHOW GLOBAL VARIABLES LIKE 'innodb%'\G, 3) Soru: innodb eklentisini kurdunuz mu ?, 4) Lütfen çıktıyı gönderinSHOW ENGINE INNODB STATUS\G
RolandoMySQLDBA

Soruya aşağıdaki bilgileri ekledim. Ama ben SHOW ENGINE INNODB STATUS\Gsadece 30k harfli bir metin ayırmak için izin verildi, çünkü ben, tüm çıkış gönderemedim. Bu yüzden bir şey atlamak zorunda kaldım. Soru 3) Bunlarla ne demek istiyorsun? Ben sadece innodb için tablo motoru ayarlamak bir şey yüklemedim.
M.Hirn

Yanıtlar:


7

GÖZLEM # 1

Sadece çıktınıza bakarak SHOW ENGINE INNODB STATUS\Gher işlemin altında çeşitli tablo kilidi mesajı görüyorum. Kilit 38096 satırı tutan bir işleminiz var

------------------
---TRANSACTION 0 20639508, ACTIVE 30 sec, process no 1655, OS thread id 47843558143744 fetching rows
mysql tables in use 1, locked 1
LOCK WAIT 700 lock struct(s), heap size 63472, 38096 row lock(s)
MySQL thread id 99117, query id 2086890 s16468810.onlinehome-server.info 87.106.82.83 web0 Updating
UPDATE userproducts SET lowest_price=109.9, last_lowest_price_update='2012-09-12 17:14:53' WHERE product_id LIKE 'B002AL8F72'
------- TRX HAS BEEN WAITING 1 SEC FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 631 page no 985 n bits 136 index `PRIMARY` of table `usr_web0_1`.`userproducts` trx id 0 20639508 lock_mode X waiting
Record lock, heap no 59 PHYSICAL RECORD: n_fields 34; compact format; info bits 0
 0: len 4; hex 815d9f43; asc  ] C;; 1: len 6; hex 0000013aef08; asc    :  ;; 2: len 7; hex 00000000391358; asc     9 X;; 3: len 4; hex 80006f9a; asc   o ;; 4: len 12; hex 30302d3956335a2d47555a34; asc 00-9V3Z-GUZ4;; 5: len 10; hex 42303032414c38463732; asc B002AL8F72;; 6: len 4; hex cdccdb42; asc    B;; 7: len 4; hex 00000000; asc     ;; 8: len 4; hex cdccdb42; asc    B;; 9: len 4; hex 000080bf; asc     ;; 10: len 4; hex 800003e7; asc     ;; 11: len 4; hex cdccdb42; asc    B;; 12: len 30; hex 537572706c75732056696e74616765204a61636b65204d36352052656769; asc Surplus Vintage Jacke M65 Regi;...(truncated); 13: len 30; hex 687474703a2f2f6563782e696d616765732d616d617a6f6e2e636f6d2f69; asc http://ecx.images-amazon.com/i;...(truncated); 14: len 4; hex 800034c5; asc   4 ;; 15: len 10; hex 42656b6c656964756e67; asc Bekleidung;; 16: len 3; hex 4e2f41; asc N/A;; 17: len 3; hex 4e2f41; asc N/A;; 18: len 4; hex 80000000; asc     ;; 19: len 4; hex 80000000; asc     ;; 20: len 4; hex 80000000; asc     ;; 21: len 4; hex 80000000; asc     ;; 22: len 4; hex 80000000; asc     ;; 23: len 4; hex 80000000; asc     ;; 24: len 1; hex 80; asc  ;; 25: SQL NULL; 26: SQL NULL; 27: len 4; hex 00000000; asc     ;; 28: len 4; hex 00000000; asc     ;; 29: len 4; hex 00000000; asc     ;; 30: len 4; hex 6575726f; asc euro;; 31: len 4; hex 00000000; asc     ;; 32: len 8; hex 8000124cc3d291ec; asc    L    ;; 33: len 8; hex 8000124cc3d28fc6; asc    L    ;;

GÖZLEM # 2

Tablo yapısına baktığımda, userproductstablonun üzerinde bir indeks olmadığını görüyorum product_id. Bu nedenle, tek bir satırın güncellemesini gerçekleştirmek için tam tablo taramaları yapıyorsunuz.

GÖZLEM # 3

Ayrıca userproductstabloda yinelenen bir dizin var . İki dizin userinfos_idsütunla başlar. Yinelenen önde gelen sütunlarla dizinleri şişirmeye gerek yoktur.

GÖZLEM # 4

İnnodb_thread_concurrency = 8'iniz var. Sonsuz eşzamanlılık için sıfıra ayarlanmalıdır.

Bu konudaki geçmiş yayınlarımı gör

ÖNERİ # 1

Bunu /etc/my.cnf dosyasına ekle

[mysqld]
innodb_thread_concurrency = 0

ve MySQL'i yeniden başlatın

ÖNERİ # 2

Lütfen bunu kapalı döneminizde çalıştırın

ALTER TABLE userproducts ADD INDEX product_id (product_id),DROP INDEX userinfos_id;

ÖNERİ # 3 (İsteğe Bağlı Uzun Vadeli Hedef)

İnnodb_file_per_table işleviniz olduğundan InnoDB Düzeninizi yeniden yapılandırmanız gerekir. Bu, çoklu ibdata dosyalarına olan ihtiyacı ortadan kaldırır. Sadece birine ihtiyacın var. Lütfen bu konudaki geçmiş yayınlarıma bakın:

Bir şans ver !!!


2
Vay. Bu beklediğimden çok daha fazlası. Teşekkürler her şeyi deneyeceğim ve nasıl çalıştığını anlatmaya geri döneceğim. Teşekkürler;)
M.Hirn

1
@MichaelHirn Evet, şaka yapmıyorum. Tüm iyi DBA sorularını RolandoMySQLDBA.stackexchange.com'a taşımaya ve diğer SE sitelerini atlamaya başlamalıyız. :)
HopelessN00b

3

Product_id dizinindeki eksik dizin kesinlikle sorundur.

Bu , durumu daha da optimize edebilir : Ürün_idelerinizi iş parçacıkları arasında bölmeden önce sıralayın.


Evet sen haklisin. Eksik ürün_kimliği hataya neden oldu. Peki ben sabit olabilir, ama ben de alternatif optimize strateji için ilginç. Nasıl gidileceğini daha ayrıntılı açıklayabilir misiniz? Ne demek istediğini anlamıyorum.
M.Hirn

INSERT'lerin verileri (veya dizin girişlerini) diskte uygun yerlere yerleştirmeleri gerekir. Bu, (1) önceden önbelleğe alınmamışsa bir bloğu okumak, (2) yeni bilgileri eklemek için bloğu güncellemek ve (3) sonunda bloğu diske geri yazmaktır. Veriler sıralandığında, önbelleğe alınmış olan gerekli bloğu bulma şansı daha yüksektir, böylece okuma ve / veya yazma engellenir. (Disk G / Ç, büyük tablolarla uğraşırken en büyük maliyettir.)
Rick James

0

Tamam, her şeyden önce, endişelendiğiniz hata lock wait timeout exceededaslında bir şeyin başarısız olduğunu söylüyor çünkü bir kilidin açılması için çok uzun süre beklemek zorunda kaldı. Bellek kullanımı ile ilgili değildir. Burada , bu hatanın genel sorun gidermesi hakkında iyi bir [temel] yanıtı olan bir StackOverflow iş parçacığı vardır .

Orada göreceğiniz gibi, çalıştırarak iyi miktarda veri SHOW INNODB STATUS\Galabilir ve InnoDB kilit bekleme zaman aşımını kullanım durumunuz için daha uygun bir değere yapılandırabilirsiniz.

Raporda gördüklerinizle ilgili sorularınıza gelince, saniyede 480.000 satır okunması, raporun kapsadığı zaman dilimi boyunca ortalama olarak 480.000 veritabanı satırının okunması anlamına gelir.

"Rapor hakkında garip görünen" kısmı yanıtlamaktan tamamen rahat değilim, ancak muhtemelen bir yanıt almak için veritabanına karşı tam olarak ne çalıştırıldığı konusunda daha fazla bilgi vermeniz gerektiğini söyleyebilirim. ancak ... saniyede 480 bin satır okunduğu gibi büyük bir okuma değeri gördüğümde, hemen hangi sorgunun veya sorguların kaçtığını ve tüm veritabanını okumaya çalıştığını merak etmeye başlarım. Belki daha deneyim DBA üzerinde başka görüşe sahip, ancak sayısından daha başka O raporda görebilirsiniz doğal tuhaf bir şey, orada updatesve createssize yapmakta olduğunuz söyledin rekor güncelleme hacmi ile ilgili değil.


Tamam, önümüzdeki dakikalarda Kod hakkında daha fazla bilgi düzenleyeceğim. Ne demek istiyorsun, "gerçekleştirdiğini söylediğin kayıt güncellemesinin hacmine karşılık gelmeyen güncelleme ve yaratma sayısı." Daha azımız var updatesmı? Sanırım 56 Milyon çok bırakıldı. Beni yanlış hissettiren şey 640 Milyar Okuma. Bunlar ne reads? Bu SELECTİfadeler mi?
M.Hirn

@MichaelHirn 10 dakikada 60.000 kayıt güncellemesi yaptığınızı söylediniz, bu 100 updates/ s olacaktır, ancak MySQL raporu yalnızca 42.3 / s gösteriyor, bu da belirttiğiniz hacim için beklenenden çok daha az. Tüm bunları eklemek bile creates, sahip olduğunuz söylediğiniz hacimden önemli ölçüde uzaktasınız. Eğer 60.000 / 10 dakika hacminin çok doğru, iyi olmayan kaba bir sayı olması, ancak benim için göze çarpıyordu. Gelince reads, evet, bir SELECTdeyim neden readsbir veritabanı üzerinde. Çok sayıda satırdan seçim yapıyorsa, çok sayıda satır okur. Ama evet, bu benim için çok yüksek görünüyor.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.