mysql
事务问题。
在一次开发过程中,发现mysql事务rollback没有起作用,研究了一下,发现事务还有如下特点:
1、auto_increment值不会被rollback
2、不是所有语句都支持事务,如create table和alter table不支持事务。
3、如果一个事务中的某条语句不支持事务(比如有一条create table语句),那么所有查询都将被执行,不会rollback。
4、当发生3的情况时,数据库查询记录上仍显示:
BEGIN
INSERT INTO ......
CREATE TABLE ......
ROLLBACK
这时虽然显示rollback,实际上数据库内容并没有rollback,insert语句和create语句都被数据库执行了。
按查询顺序排序:
select id from users where id in (2,1,5,3,4);
返回结果为:1,2,3,4,5
select id from users where id in (2,1,5,3,4) order by field(id,2,1,5,3,4);
返回结果为:2,1,5,3,4
mysql配置变量(show variables like '%max%';)
max_allowed_packet 数值在16M以上,如:20971520(20M)这个参数限制mysql返回数据量的大小。
innodb_buffer_pool_size 数值调高,如:536870912(512M)
query_cache_size 调高,如:16777216(16M)
query_cache_type 调成ON
以上配置对mysql影响比较大
如果想开启慢查询log,修改以下变量数值:
long_query_time 0.400000
slow_query_log ON
slow_query_log_file /var/run/mysqld/mysqld-slow.log
redis
rails使用resque处理任务,用命令行插入数据:
redis-cli sismember resque:queues email_queue # 1 or 0
redis-cli sadd resque:queues email_queue #如果上句返回值是0
redis-cli rpush resque:queue:email_queue '{"class":"Email","args":[902,5,6]}'
redis-cli rpush resque:queue:mailer '{"class":"Mailer","args":["email",5,{"from":"abc@def.ghi","email_id":1}]}'
失败任务重新加入队列:
(Resque::Failure.count-1).downto(0).each do |i|
Resque::Failure.requeue(i)
Resque::Failure.remove(i)
end
oracle
查看表结构:
SELECT T1.TABLE_NAME,
T1.COLUMN_NAME,
T1.DATA_TYPE || '(' || T1.DATA_LENGTH || ')',
T2.COMMENTS
FROM USER_TAB_COLS T1, USER_COL_COMMENTS T2
WHERE T1.TABLE_NAME = T2.TABLE_NAME
AND T1.COLUMN_NAME = T2.COLUMN_NAME
AND T1.TABLE_NAME =upper('user_table_name') ;