vít novák: velká data v malém šuplíčku

20
První krůčky k udržení velkých dat v malé krabičce Víťa Novák Heukreka.cz

Upload: develcz

Post on 06-May-2015

850 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: Vít Novák: Velká data v malém šuplíčku

První krůčky k udrženívelkých dat v malé krabičce

Víťa NovákHeukreka.cz

Page 2: Vít Novák: Velká data v malém šuplíčku
Page 3: Vít Novák: Velká data v malém šuplíčku
Page 4: Vít Novák: Velká data v malém šuplíčku

Šéfe, nebylo by nějaký železo?

Zdroj: ČT24.cz

Page 5: Vít Novák: Velká data v malém šuplíčku

- Pořizovací náklady

- Provozní náklady

- Lidské zdroje

- Dost možná by vám to vůbec nepomohlo

Page 6: Vít Novák: Velká data v malém šuplíčku

Měřte si to

Page 7: Vít Novák: Velká data v malém šuplíčku

- cachuje se?

- neopakují se dotazy?

- SELECTy max pár ms?

Page 8: Vít Novák: Velká data v malém šuplíčku

-- (1196.34 ms) SELECT p.`productId`, c.`seoId` FROM CategoryToplist ct JOIN Product p ON ct.`categoryId` = p.`categoryId` JOIN ProductTopFifty ptf p.`productId` = ptf.`productId` JOIN Category c ON p.`categoryId` = c.`categoryId` WHERE p.`displayStatus` = 22 AND ptf.`order` = 1 AND ct.`categoryId` IN (1, 2, ... ) ORDER BY ct.`rank` DESC;

Page 9: Vít Novák: Velká data v malém šuplíčku

ALTER TABLE `ProductTopFifty` ADD INDEX `order` (`order`);

Page 10: Vít Novák: Velká data v malém šuplíčku

ALTER TABLE `ProductTopFifty` ADD INDEX `order` (`order`);

-- (925.47 ms) SELECT p.`productId`, c.`seoId` FROM CategoryToplist ct JOIN Product p ON ct.`categoryId` = p.`categoryId` JOIN ProductTopFifty ptf p.`productId` = ptf.`productId` JOIN Category c ON p.`categoryId` = c.`categoryId` WHERE p.`displayStatus` = 22 AND ptf.`order` = 1 AND ct.`categoryId` IN (1, 2, ... ) ORDER BY ct.`rank` DESC;

Page 11: Vít Novák: Velká data v malém šuplíčku

ALTER TABLE `ProductTopFifty` ADD INDEX `order` (`order`);

-- (925.47 ms) SELECT p.`productId`, c.`seoId` FROM CategoryToplist ct JOIN Product p ON ct.`categoryId` = p.`categoryId` JOIN ProductTopFifty ptf p.`productId` = ptf.`productId` JOIN Category c ON p.`categoryId` = c.`categoryId` WHERE p.`displayStatus` = 22 AND ptf.`order` = 1 AND ct.`categoryId` IN (1, 2, ... ) ORDER BY ct.`rank` DESC;

SELECT STRAIGHT_JOIN p.`productId`, c.`seoId` FROM ProductTopFifty ptf FORCE INDEX(`order`) JOIN Product p ON p.`productId` = ptf.`productId` JOIN CategoryToplist ct ON p.`categoryId` = ct.`categoryId` JOIN Category c ON p.`categoryId` = c.`categoryId` WHERE p.`displayStatus` = 22 AND ptf.`order` = 1 AND ct.`categoryId` IN (1, 2, ... ) ORDER BY ct.`rank` DESC;

Page 12: Vít Novák: Velká data v malém šuplíčku

ALTER TABLE `ProductTopFifty` ADD INDEX `order` (`order`);

-- (925.47 ms) SELECT p.`productId`, c.`seoId` FROM CategoryToplist ct JOIN Product p ON ct.`categoryId` = p.`categoryId` JOIN ProductTopFifty ptf p.`productId` = ptf.`productId` JOIN Category c ON p.`categoryId` = c.`categoryId` WHERE p.`displayStatus` = 22 AND ptf.`order` = 1 AND ct.`categoryId` IN (1, 2, ... ) ORDER BY ct.`rank` DESC;

-- (7.69 ms) SELECT STRAIGHT_JOIN p.`productId`, c.`seoId` FROM ProductTopFifty ptf FORCE INDEX(`order`) JOIN Product p ON p.`productId` = ptf.`productId` JOIN CategoryToplist ct ON p.`categoryId` = ct.`categoryId` JOIN Category c ON p.`categoryId` = c.`categoryId` WHERE p.`displayStatus` = 22 AND ptf.`order` = 1 AND ct.`categoryId` IN (1, 2, ... ) ORDER BY ct.`rank` DESC;

Page 13: Vít Novák: Velká data v malém šuplíčku
Page 14: Vít Novák: Velká data v malém šuplíčku

- dlouhé transakce

- zamykání spousty záznamů

- zamykání ještě více záznamů

Page 15: Vít Novák: Velká data v malém šuplíčku

Najít a zabít!SELECT (UNIX_TIMESTAMP() - UNIX_TIMESTAMP(trx.trx_started)), trx_weight, trx_query, IF(ps.state = 'Copying to tmp table on disk',1,0), trx_rows_modified, trx_rows_locked FROM INFORMATION_SCHEMA.INNODB_TRX trx LEFT JOIN INFORMATION_SCHEMA.PROCESSLIST ps ON trx.trx_mysql_thread_id = ps.id WHERE (UNIX_TIMESTAMP() - UNIX_TIMESTAMP(trx.trx_started)) >= max_transaction_time AND (trx_state = 'RUNNING');

Page 16: Vít Novák: Velká data v malém šuplíčku

Najít a zabít!SELECT (UNIX_TIMESTAMP() - UNIX_TIMESTAMP(trx.trx_started)), trx_weight, trx_query, IF(ps.state = 'Copying to tmp table on disk',1,0), trx_rows_modified, trx_rows_locked FROM INFORMATION_SCHEMA.INNODB_TRX trx LEFT JOIN INFORMATION_SCHEMA.PROCESSLIST ps ON trx.trx_mysql_thread_id = ps.id WHERE (UNIX_TIMESTAMP() - UNIX_TIMESTAMP(trx.trx_started)) >= max_transaction_time AND (trx_state = 'RUNNING');

-----------------------------------To: [email protected]: [email protected]: Teda ty mas ale transakci! -----------------------------------array ( 'id' => '1240560', 'dbHost' => 'productionserver1.h.cz', 'ts' => '2013-08-18 00:06:23', 'thd' => '25290427', 'statement' => 'DELETE FROM XmlImportStatus WHERE timeStarted < (NOW() - INTERVAL 48 HOUR) LIMIT 10000', 'runtime' => '33', 'tmp_table_on_disk' => '0', 'rows_locked' => '2809', 'rows_modified' => '67493', )

Page 17: Vít Novák: Velká data v malém šuplíčku

function deleteSomething(){ DB::query("DELETE FROM XmlImportStatus WHERE timeStarted < (NOW() - INTERVAL 48 HOUR) LIMIT 10000");}

Page 18: Vít Novák: Velká data v malém šuplíčku

function deleteSomething(){ DB::query("DELETE FROM XmlImportStatus WHERE timeStarted < (NOW() - INTERVAL 48 HOUR) LIMIT 10000");}

function deleteSomething(){ do { $affected = DB::query("DELETE FROM XmlImportStatus WHERE timeStarted < (NOW() - INTERVAL 48 HOUR) LIMIT 1000"); } while (0 < $affected);}

Page 19: Vít Novák: Velká data v malém šuplíčku

Vytmav mi to! Pro hodnocení přednášky skenuj:

Podpoř dobrou věc: Heureka Boys na http://movember.comDej se mezi nás! http://info.heureka.cz/kariera/

Page 20: Vít Novák: Velká data v malém šuplíčku

Vytmav mi to! Pro hodnocení přednášky skenuj:

Podpoř dobrou věc: Heureka Boys na http://movember.comDej se mezi nás! http://info.heureka.cz/kariera/