(转)memcached的分布式解读
作者:tdqing原文:http://tdqing.javaeye.com/blog/451178memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能。服务器端仅包括 内存存储功能,其实现非常简单。至于memcached的分布式,则是完全由客户端程序库实现的。这种分布式是memcached的最大特点。[@more@]memcached的分布式是什么意思?这里多次使用了“分布式”这个词,但并未做详细解释。现在开始简单地介绍一下其原理,各个客户端的实现基本相同。下面假设memcached服务器有node1~node3三台,应用程序要保存键名为“tokyo”“kanagawa”“chiba”“saita
(转)InnoDB之Dirty Page、Redo log
作者:苏普 | 【转载时请务必以超链接形式标明文章原始出处和作者信息及本声明】 地址:http://rdc.taobao.com/blog/dba/html/317_innodb-dirty-page-redo-log.html在InnoDB中,buffer pool里面的dirty page一方面可以加快数据处理速度,同时也会造成数据的不一致(RAM vs DISK)。本文介绍了dirty page是如何产生,以及InnoDB如何利用redo log如何消除dirty page产生的数据不一致。[@more@]当事务(Transaction)需要修改某条记录(row)时,InnoDB需要将该数据所在的page从 disk读到buffer pool中,事务提交后,InnoDB修改page中的记
(转)索引扫描还是全表扫描(Index Scan Or Full Table Scan)
作者:Sky.Jian | 可以任意转载, 但转载时务必以超链接形式标明文章原始出处 和 作者信息 及 版权声明 链接:http://www.jianzhaoyang.com/database/index_scan_or_full_table_scan在大多数时候,大家都会认为Sql语句中走Index Scan比Full Table Scan快,我前面也走进了这样的误区(对Index Scan的理解不够)。这两天重新复习了一下这方面内容,并整理了一下。[@more@]当Oracle Optimizer(优化器)没有选择Index Scan而选择了Full Table Scan的时候一般会是由两种情况: 1、表没有Analyze,Optimizer得不到statistics(统计)数据,
使用mysqlsniffer捕获SQL语句
MySQL5.1之前general log不能在运行时启用或禁用,有时想捕捉SQL来查找问题就很麻烦,偶然间发现一个很不错的小工具:mysqlsniffer,可以用来捕捉SQL语句,使用帮助如下:mysqlsniffer --helpmysqlsniffer v1.2 - Watch MySQL traffic on a TCP/IP networkUsage: mysqlsniffer [OPTIONS] INTERFACEOPTIONS: --port N Listen for MySQL on port number N (default 3306) --verbose Show extra packet information --tcp-ctrl Show TCP control packets (SYN, FIN, RST, ACK) --net-hdrs Show major IP and
用mysqlbinlog查看row格式的事件
MySQL 5.1开始,binlog支持row-based的格式,默认情况下只能看到一些经过base-64编码的信息,如DELIMITER /*!*/;# at 7493962#090827 5:25:03 server id 1 end_log_pos 0 Start: binlog v 4, server v 5.1.26-rc-community-log created 090827 5:25:03BINLOG 'L6iVSg8BAAAAZgAAAAAAAAAAAAQANS4xLjI2LXJjLWNvbW11bml0eS1sb2cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC'/*!*/;# at 7493962# at 7494009#090827 13:20:40 server id 1 end_log_pos 7494009 Table_map: `test`.`test1` m
学习笔记:MySQL Cluster 的binlog
MySQL Cluster中,如果启用了binlog,在任何sql node的更新操作,都会写入所有node的binlog,当然,这是有条件的:更新操作的node上binlog_format=mixed或者row,反之,如果是statement,就只会在更新操作的node上写入binlog。 另外,MySQL Cluster Replication是要求binlog是row-based,所以要将master的binlog设置为mixed或row。手册中如是说:Replication of a MySQL Cluster as described in this section and those following is dependent on row-based replication. This means that the replication master MySQL server must
学习笔记:MySQL Cluster 的结果顺序
最近搭建了MySQL Cluster的环境来学习,发现一个很有意思的现象,在不加order by的情况下,返回的结果顺序是随机的,每次都不一样,如下[@more@]mysql> select * from test_ndb limit 3; +---+-------+ | i | a | +---+-------+ | 5 | test5 | | 1 | test1 | | 2 | test2 | +---+-------+ 3 rows in set (0.05 sec) mysql> select * from test_ndb limit 3; +---+-------+ | i | a | +---+-------+ | 7 | test7 | | 3 | test3 | | 6 | test6 | +---+-------+ 3 rows in set (0.03 sec) mysql> sel
(链接)MySQL Cluster的备份与恢复
http://yueliangdao0608.blog.51cto.com/397025/81534[@more@]
使用SHOW binlog events查看binlog内容
有时程序员需要跟踪sql来查找问题时,我经常会使用mysqlbinlog命令行查看binlog,觉得比较麻烦,今天突然发现原来mysql有个命令可以直接查看。SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count] 用于在二进制日志中显示事件。如果您不指定'log_name',则显示第一个二进制日志。 LIMIT子句和SELECT语句具有相同的语法。[@more@]
MySQL从库切换成主库后的relay-bin问题
有一个数据库,之前是从库,后来切换成主库了,my.cnf中的关于主库的配置已经注释掉,show slave status结果是也空的,但一直发现每天用mysqldump备份(带--flush-logs)之后会产生一个relay-bin.xxxxxx,删除了relay-bin.*之后,还是会继续产生,怎么回事呢?还是求助google吧,终于找到原因。http://bugs.mysql.com/bug.php?id=6178原来从库切换主库之后,需要执行一下RESET SLAVE命令,不然主库配置还是会缓存在master.info文件中,执行RESET SLAVE后,会将master.info和relay-log.info删除。[@more@]
Perl CPAN安装报错CPAN::Modulelist的解决办法
今天用CPAN安装Term::ReadLine,报了个这样的错误Going to read /root/.cpan/sources/modules/03modlist.data.gzCan't locate object method "data" via package "CPAN::Modulelist" (perhaps you forgot to load "CPAN::Modulelist"?) at (eval 31) line 1.at /usr/lib/perl5/5.8.5/CPAN.pm line 3406CPAN::Index::rd_modlist('CPAN::Index', '/root/.cpan/sources/modules/03modlist.data.gz') called at /usr/lib/perl5/5.8.5/CPAN.pm line 3129CPAN::Index::reload('CPAN::Index') called at /usr/lib/
计算mysql buffer的命中率及使用率
MyISAM Key buffer命中率:100 - ( (Key_reads * 100) / Key_read_requests )MyISAM Key buffer的使用率:100 - ( (Key_blocks_unused * key_cache_block_size) * 100 / key_buffer_size ) InnoDB Buffer Pool 的命中率(Innodb_buffer_pool_read_requests - Innodb_buffer_pool_reads) / Innodb_buffer_pool_read_requests * 100%[@more@]
MySQL复制的奇怪问题
最近机房那边中毒,网络经常不正常,经常导致MySQL的复制中断,前几次都是报Got fatal error 1236: 'error reading log entry' from master when reading data from binary log的错误,今天却出现一个奇怪的现象,从库上show slave status一切正常,主库上却没有了slave i/o的连接,从库日志中也没发现异常。因此我crontab中定期检查slave status的任务也检查不到错误了,没办法stop slave;start slave;复制恢复正常。。。。[@more@]
(转)从对数据访问扭曲的适应性评价PostgreSQL与InnoDB
原文作者:风轻扬出处:http://wangyuanzju.blog.163.com/blog/static/1302920070245344752/前两篇文章中已经通过介绍Falcon的架构和对面向Web 2.0的存储引擎的讨论引出数据访问扭曲这一话题,对于我接触更多,也是最为流行的两大开源DBMS:PostgreSQL和MySQL,自然忍不住按它 来比较一把了。由于这一问题只与DBMS的存储系统有关,因此这里实际上比较的是PostgreSQL与MySQL的事务型存储引擎InnoDB。PostgreSQL与InnoDB都采用多版本并发控制技术,但两者在存储的实现机制上仍然有以下两个重大差别:PostgreSQL用堆存储记录,而InnoDB用按
学习笔记:InnoDB表和索引结构(二)
4、 自适应的哈希索引 如果一个表几乎完全缓存在主内存中,在其上执行查询最快的方法就是使用哈希索引。InnoDB有一个自动机制,它监视对为一个表定义的索引的索引搜索。如果InnoDB注意到查询会从建立一个哈希索引中获益,它会自动地这么做。 注意,哈希索引总是基于表上已存在的B树索引来建立。根据InnoDB对B树索引观察的搜索方式,InnoDB会在为该B树定义的任何长度的键的一个前缀上建立哈希索引。 哈希索引可以是部分的:它不要求整个B树索引被缓存在缓冲池。InnoDB根据需要对被经常访问的索引的那些页面建立哈希索引。 在某种
学习笔记:InnoDB表和索引结构(一)
MySQL把表的数据词典信息以.frm文件的形式存在数据库目录里,所有MySQL存储引擎都是这样的。但是每个InnoDB表在表空间内的InnoDB内部数据词典里也有它自己的条目。当MySQL移除表或数据库,它不得不删除.frm文件和InnoDB数据词典内的相应条目。这就是为什么你不能在数据库之间简单地移动.frm文件来移动InnoDB表。 [@more@]1、聚集索引和第二索引 每个InnoDB有一个叫聚集索引(clustered index)的特殊索引,行的数据被存于其中。如果你的表定义了主键,主键的索引就是聚集索引。 如果你的表没有主键,MySQL就选择第一个不可为空的唯
学习笔记:InnoDB存储结构及多版本实现
因为InnoDB是多版本化的数据库存储引擎, 它必须在表空间中保存关于旧版本数据行的信息。这个信息被存在名为rollback segment(类似于Oracle中的回滚段)的数据结构中。[@more@]在内部,InnoDB给数据库中的每一行添加三个域。一个是6字节的DB_TRX_ID域,用来说明插入或更新该行的最后一个事务的事务识别符。同时,删除操作也被内部处理为更新操作,其中行中一个特殊的位被设置用来标注该行已删除。每一行也包含一个称为回滚指针的7字节DB_ROLL_PTR域。回滚指针指向一个写在回滚段中的撤销日志记录。如果该行被更新,撤销日志记录包含重
sqlplus登陆环境设置(glogin.sql)
$ vi $ORACLE_HOME/sqlplus/admin/glogin.sql (登陆sqlplus后会自动执行) 或 $ vi ~/login.sql (登陆sqlplus后会自动执行) 或 $ vi ~/.login.sql (登陆sqlplus后得手工执行) 增加以下内容,sqlplus登陆时会自动读取 [@more@]----------------------------------------------------------------------------------- --定义缓冲编辑器为vi define_editor=vi --使DBMS_OUTPUT有效,并设置成最大buffer,并防止"吃掉"最前面的空格 set serveroutput on size 1000000 format wrapped --设置一行可以
Oracle监听器的静态注册与动态注册,以及DB_DOMAIN问题
从Oracle8i开始,Oracle可以不需要在监听器SID_LIST中配置需要监听的Oracle实例,PMON会自动动态注册到监听器,当然,这是有条件限制的,如:监听器使用缺省名称或在local_listener、remote_listener中配置,端口1521,TCP协议。另外,如想使用动态注册,请注意检查/etc/hosts中的机器名及IP是否正确。如果你设置了DB_DOMAIN,需要注意以下几点:[@more@]1、静态注册时,GLOBAL_NAME应该是SERVICE_NAMES+DB_DOMAIN。如下 (SID_DESC = (GLOBAL_NAME = oradb.com) (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
(转)Oracle DBA在新环境下必须了解的事情
转载自IT168 [ http://www.it168.com/ ] 本文链接:http://tech.it168.com/a2009/0525/576/000000576908.shtml 作者:IT168 Toms_zhang面对一个全新的环境,作为一个Oracle DBA,首先应该了解什么?[@more@] 在这里,不谈那些大的方面,比如了解整个IT环境整体情况,假设你已经知道了这些,接下来需要面对的就是这些一个个活生生的database了.这里总结了一些一般的思路来面对一个全先的database,从而快速了解你面对的环境概要. 这也不是教科书,只是一些心得和体会,对于这种问题,每个人的认识的角度是不一样的.欢迎大家继续补充完善.