项目开源了,欢迎star~
顶部导航栏
1 |
|
示例图:
1 |
|
示例图:
前几日操作truncate table
操作时,遇到一个问题,通过show processlist
获取关键信息,通过此文章了解更多,故记录于此。
在MySQL以前的版本中,存在这样一个Bug:
大致意思如下:
如果user1存在一个操作table的事务,而user2要删除这张表,当user1提交这个事务时,binlog表现出来的行为类似如下:
1 | DROP TABLE t; |
这样就导致这个问题出现了。
所以MySQL在后续版本中增加了Metadata Lock,只有在事务结束后才会释放Metadata lock,因此在事务提交或回滚前,是无法进行DDL(不仅仅是DDL哦)操作的。
MySQL官方文档地址:
http://dev.mysql.com/doc/refman/5.6/en/metadata-locking.html
查询当前正在运行的事务(下面为拷贝过来的,仅作参考)
1 | mysql> select * from information_schema.innodb_trx\G |
查看运行的SQL语句
根据查询到的trx_started时间以及trx_mysql_thread_id到MySQL的general log中查找,当然前提是开启了general log的功能,对于这句话我有一个疑惑点,如果没有开启general log时那么无法查看对应操作的SQL语句了???
所以此处给出排查方式:
1 | -- 这条语句用于查看哪个线程被另外哪一个线程阻塞, 分别为 阻塞的线程ID、阻塞的SQL的语句、谁阻塞的、阻塞者的SQL语句 |
但是方式2不一定能够打印出具体阻塞的语句,为什么,如果出现此类问题,可以先看下autocommit,哈哈…
如果还是无法定位SQL,那么还是暴力一点:
1 | mysql> kill 52402; |
如何复现这种情况(另外对于主主/主从复制也会出现),可参考文章
IPDB是什么?IPDB(Ipython Debugger),和GDB类似,是一款集成了Ipython的Python代码命令行调试工具,可以看做PDB的升级版。这篇文章总结IPDB的使用方法,主要是若干命令的使用。更多详细的教程或文档还请参考Google。
IPDB以Python第三方库的形式给出,使用pip install ipdb
即可轻松安装。
在使用时,有两种常见方式。
通过在代码开头导入包,可以直接在代码指定位置插入断点。如下所示:
1 | import ipdb |
则程序会在执行完x = 10这条语句之后停止,展开Ipython环境,就可以自由地调试了。
上面的方法很方便,但是也有不灵活的缺点。对于一段比较棘手的代码,我们可能需要按步执行,边运行边跟踪代码流并进行调试,这时候使用交互式的命令式调试方法更加有效。启动IPDB调试环境的方法也很简单:
1 | python -m ipdb your_code.py |
IPDB调试环境提供的常见命令有:
帮助文档就是这样一个东西:当你写的时候觉得这TM也要写?当你看别人的东西的时候觉得这TM都没写?
使用h即可调出IPDB的帮助。可以使用help command的方法查询特定命令的具体用法。
使用n(next)执行下一条语句。注意一个函数调用也是一个语句。如何能够实现类似“进入函数内部”的功能呢?
进入函数内部
使用s(step into)进入函数调用的内部。
使用b line_number(break)的方式给指定的行号位置加上断点。使用b file_name:line_number的方法给指定的文件(还没执行到的代码可能在外部文件中)中指定行号位置打上断点。
另外,打断点还支持指定条件下进入,可以查询帮助文档。
一直执行直到遇到下一个断点
使用c(continue)执行代码直到遇到某个断点或程序执行完毕。
一直执行直到返回
使用r(return)执行代码直到当前所在的这个函数返回。
使用j line_number(jump)可以跳过某段代码,直接执行指定行号所在的代码。
在IPDB调试环境中,默认只显示当前执行的代码行,以及其上下各一行的代码。如果想要看到更多的上下文代码,可以使用l first, second命令。
其中first指示向上最多显示的行号,second指示向下最多显示的行号(可以省略)。当second小于first时,second指的是从first开始的向下的行数(相对值vs绝对值)。
根据SO上的这个问题,你还可以修改IPDB的源码,一劳永逸地改变上下文的行数。
调试兴起,可能你会忘了自己目前所在的行号。例如在打印了若干变量值后,屏幕完全被这些值占据。使用w或者where可以打印出目前所在的行号位置以及上下文信息。
我们可以使用whatis variable_name的方法,查看变量的类别(感觉有点鸡肋,用type也可以办到)。
当你身处一个函数内部的时候,可以使用a(argument)打印出传入函数的所有参数的值。
使用p(print)和pp(pretty print)可以打印表达式的值。
使用cl或者clear file:line_number清除断点。如果没有参数,则清除所有断点。
使用restart重新启动调试器,断点等信息都会保留。restart实际是run的别名,使用run args的方式传入参数。
使用q退出调试,并清除所有信息。
Arthur Samuel (1959). Machine Learning: Field of study that gives computers the ability to learn without being explicitly programmed.
使机器在没有明确编程上的研究领域具备学习的能力.
Tom Mitchell (1998) Well-posed Learning Problem: A computer program is said to learn from experience E with respect to some task T and some performance measure P, if its performance on T, as measured by P, improves with experience E.
对于某类任务T和性能度量P,如果一个计算机程序在T上以P衡量的性能随着经验E而自我完善,那么我们称这个计算机程序在从经验E学习.
完全为了押韵…
如图片所示,监督式学习为right answers given.
.此处为regression(回归模型)
.
Regression: Predict continuous valued output(price)
回归: 预测一系列的值输出(价钱)
此处为Classification(分类模型)
,
Classification: Discrete valued output(0 or 1)
分类: 分离值输出(0或者1)
代价函数: 与真实的所表现出来的误差函数.
强烈建议阅读:深入浅出-梯度下降法及其实现
略.
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true