Atlas icon indicating copy to clipboard operation
Atlas copied to clipboard

用sysbech压测atlas报错,请问atlas是不支持prepare statement吗

Open sherlockhua opened this issue 11 years ago • 11 comments

报错信息如下: ALERT: failed to execute mysql_stmt_execute(): Err1243 Unknown prepared statement handler (11) given to mysqld_stmt_execute FATAL: database error, exiting...

测试脚本如下:

sysbench --test=oltp --num-threads=128 --max-requests=8000000 --oltp-test-mode=nontrx --db-driver=mysql --mysql-db=my_db --mysql-host=10.105.45.151 --mysql-port=11811 --mysql-user=xm_dba --mysql-password=123 --oltp-nontrx-mode=select --db-ps-mode=auto run

非常感谢

sherlockhua avatar Dec 02 '14 02:12 sherlockhua

测试发现有个奇怪现象: 当atlas的线程数设置大于等于sysbench的线程数时,就不会报错。否则就报上面的错误,请帮忙解释下原因。谢谢~

sherlockhua avatar Dec 02 '14 02:12 sherlockhua

是的。目前Atlas不支持prepare。加入--db-ps-mode=disable

flike avatar Dec 02 '14 08:12 flike

但是官方wiki介绍说是部分支持prepare,这个部分支持该如何理解,我们能在生产环境中使用吗?

9.Atlas支持mysql的prepare特性吗?

目前Atlas部分支持prepare功能,支持java,python,PHP(PDO方式)。

sherlockhua avatar Dec 02 '14 23:12 sherlockhua

wiki提到的语言中prepare是支持的。没提到的不支持,例如c语言。有50+公司用于线上了。

flike avatar Dec 03 '14 01:12 flike

这个为什么和语言相关呢,我理解是所有语言的mysql操作都会转换mysql 协议发送给atlas啊,只要atlas支持mysql 协议中的prepare statement协议,应该所有语言都支持吧。请指教,非常感谢哈。

sherlockhua avatar Dec 03 '14 04:12 sherlockhua

实现方式不一样的。

flike avatar Dec 03 '14 06:12 flike

嗯 查阅了相关资料,PDO方式的预处理是在客户端做的,所以atlas就支持了。而sysbench使用的mysql c API,预处理是在服务器端做的,而我们的atlas本身是不支持预处理的,所以会报错。不知道这样理解对不对,望赐教,谢谢~~

sherlockhua avatar Dec 03 '14 07:12 sherlockhua

嗯,是这样的。其实我们开发版已经实现了mysql c API的prepare,但有些复杂,未加入到正式版中。

flike avatar Dec 03 '14 10:12 flike

现在怎么样了?

denofiend avatar Nov 28 '16 02:11 denofiend

PHP如果使用PDO的话, 请把 ATTR_EMULATE_PREPARES 设置为true 如果使用golang的情况 , 请尽量使用纯SQL , 不建议使用带有预处理方式的SQL 特别需要注意的是 golang中使用xorm.Where("status=?" , UserId) 这种绑定容易出现Error:1243 错误 如果一定要使用请使用xorm.Where(fmt.Sprintf("status=%d" , UserId))

relunctance avatar Jul 10 '17 11:07 relunctance

http://php.net/manual/en/pdo.setattribute.php PDO::ATTR_EMULATE_PREPARES 配置成true

longxibendi avatar Jul 13 '18 02:07 longxibendi