29
1

1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

Embed Size (px)

Citation preview

Page 1: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

1

Page 2: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

<Insert Picture Here>

When things go wrong: how to find SQL error

Sveta SmirnovaPrinciple Technical Support Engineer, MySQL @ Oracle

Page 3: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

3

<Insert Picture Here>

Part 2. Complex things

• Crashes

• Problems repeatable only in production/high load

• Sandbox

• Best practices

Page 4: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

4

Crashes

• Symptoms:– «Lost connection to MySQL server» returned to the application

– Message in the error log file

• Check error log file

• If message contains a query try it using MySQL command line client

• If crash is repeatable fix the query

Page 5: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

5

Crashes

• If there is no query try general query log: it will contain query unless this was crash during writing to general query log

• Check backtrace for a clue about what can cause the problem

• Create core file and analyze it using debugger if needed

Page 6: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

6

Backtrace help

• stack_bottom = 0x450890f0 thread_stack 0x40000• /5.1.39/bin/mysqld(my_print_stacktrace+0x2e)[0x8ac81e]• /5.1.39/bin/mysqld(handle_segfault+0x322)[0x5df502]• /lib64/libpthread.so.0[0x3429e0dd40]• /5.1.39/bin/mysqld(_ZN6String4copyERKS_+0x16)[0x5d9876]• /5.1.39/bin/mysqld(_ZN14Item_cache_str5storeEP4Item+0xc9)

[0x52ddd9]• /5.1.39/bin/

mysqld(_ZN26select_singlerow_subselect9send_dataER4ListI4ItemE+0x45)[0x5ca145]

Page 7: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

7

Backtrace help

• /5.1.39/bin/mysqld[0x6386d1]• ...• Trying to get some variables.• Some pointers may be invalid and cause the dump to abort...• thd->query at 0x6a39e60 = select 1 from `t1` where `c0` <>

(select geometrycollectionfromwkb(`c3`) from `t1`)• thd->thread_id=2• thd->killed=NOT_KILLED

Page 8: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

8

Crashes

• If problem is not particular query

• Analyze other messages in the log

• If there is a clue fix the problem

Page 9: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

9

Too greedy buffers

• key_buffer_size=235929600• read_buffer_size=4190208• max_used_connections=17• max_connections=2048• threads_connected=13• It is possible that mysqld could use up to• key_buffer_size + (read_buffer_size +

sort_buffer_size)*max_connections = 21193712 K• -----• 21193712K ~= 20G

Page 10: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

10

Crashes

• Check if you allocated reasonable values for buffers

• Set realistic value of max_connections based on your operating system resources

• Use monitoring tools of your operating system to find which application use enormous amount of resources which lead to crashes of MySQL server.

Page 11: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

11

Production applications

• Be sure you have error logging turned on

• In case of a problem check error log first

• Turn InnoDB Monitoring to on to have information about transactions in error log file

• Use slow query log to have information about all queries which run slowly

• Tune time of query considered slow

Page 12: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

12

Production applications

• Once problem query is found try to run it isolated. If needed in test environment.

• If problem is not repeatable analyze if this is effect of options or concurrency.

• If problem is options adjust them in such a way so problem is not repeatable

Page 13: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

13

Concurrency

• Analyze if this is effect of locks:– SHOW PROCESSLIST

– ENGINE INNODB STATUS

– PERFORMANCE_SCHEMA.*_instances tables

• If yes rewrite application so queries which lock each other don't run concurrently

• If not try you can enable core files and use kill to create a core or attach debugger to the running process

Page 14: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

14

Replication errors

• IO errors– Check error log first

– Check connection and network interface

– Try to connect to master using replication credentials

• All replication SQL errors can be checked using command line client too– They are single threaded, therefore it is usually easy to identify

what caused error

– SHOW SLAVE STATUS usually contains message about SQL error

Page 15: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

15

Replication SQL errors

• Check error log for a query which caused the problem

• Check if table definitions are same on both master and slave

• Check if table on master and slave are synchronised

• Compare master and slave options. If there are different try these you have on master

Page 16: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

16

Replication SQL errors

• Get query as slave gets it from master binary log

• mysqlbinlog binlog_name.00000X

• Use option –verbose to decode row events into SQL statements

• Analyze how real query would be executed on master

Page 17: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

17

Sandbox

• Create environment same as production server, but which you can freely change and even destroy– Same server version

– Same options

Page 18: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

18

Sandbox

• MySQL Sandbox

• https://launchpad.net/mysql-sandbox

• Easiest method to deploy copy of your production environment

• You just need package of MySQL-version-you-use-***.tar.gz

Page 19: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

19

Sandbox

• $make_sandbox mysql-5.4.2-beta-linux-x86_64-glibc23.tar.gz• unpacking /mysql-5.4.2-beta-linux-x86_64-glibc23.tar.gz• ...• The MySQL Sandbox, version 3.0.05• (C) 2006,2007,2008,2009 Giuseppe Maxia• installing with the following parameters:• upper_directory = /users/ssmirnova/sandboxes

Page 20: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

20

Sandbox

• ...• ........ sandbox server started• Your sandbox server was installed in

$HOME/sandboxes/msb_5_4_2

Page 21: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

21

Sandbox

• Load dump of your production database into your sandbox

• Now you have working copy you can experiment with

• To dump only part of data:– CREATE TABLE test_problem LIKE problem;

– INSERT INTO test_problem SELECT FROM problem WHERE [condition which exists in the original query, but executed properly]

Page 22: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

22

Sandbox

• You also can create «sandbox» database in production server:– CREATE DATABASE sandbox

– USE sandbox

– CREATE TABLE problem LIKE production.problem

– INSERT INTO problem SELECT * FROM production.problem [WHERE ...]

Page 23: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

23

Sandbox

• Make sure you don't kill production server if testing in «sandbox» database

• For scenarios which can kill server use separate MySQL server or, better, physical server

Page 24: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

24

Links

• http://sql-error.microbecal.com/en/

• http://forge.mysql.com/wiki/MySQL_Proxy

• https://launchpad.net/mysql-sandbox

• http://dev.mysql.com/

Page 25: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

25

?

Page 26: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

26

Thank you!

Page 27: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

27

Page 28: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle

28

The preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions.

The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.

Page 29: 1. When things go wrong: how to find SQL error Sveta Smirnova Principle Technical Support Engineer, MySQL @ Oracle