正确的编译方法固然重要,但它只是提高MySQL服务器性能工作的一部分。MySQL服务器的许多参数会影响服务器的性能表现,而且我们可以把这些参数保存到配置文件,使得每次MySQL服务器启动时这些参数都自动发挥作用。这个配置文件就是my.cnf。
MySQL服务器提供了my.cnf文件的几个示例,它们可以在/usr/local/mysql/share/mysql/目录下找到,名字分别为my-small.cnf、my-medium.cnf、my-large.cnf以及my-huge.cnf。文件名字中关于规模的说明描述了该配置文件适用的系统类型。例如,如果运行MySQL服务器的系统内存不多,而且MySQL只是偶尔使用,那么使用my-small.cnf配置文件最为理想,这个配置文件告诉mysqld daemon使用最少的系统资源。反之,如果MySQL服务器用于支持一个大规模的在线商场,系统拥有2G的内存,那么使用mysql-huge.cnf最为合适。
要使用上述示例配置文件,我们应该先复制一个最适合要求的配置文件,并把它命名为my.cnf。这个复制得到的配置文件可以按照如下三种方式使用:
全局:把这个my.cnf文件复制到服务器的/etc目录,此时文件中所定义的参数将全局有效,即对该服务器上运行的所有MySQL数据库服务器都有效。
局部:把这个my.cnf文件复制到[MYSQL-INSTALL-DIR]/var/将使该文件只对指定的服务器有效,其中[MYSQL-INSTALL-DIR]表示安装MySQL的目录。
用户:最后,我们还可以把该文件的作用范围局限到指定的用户,这只需把my.cnf文件复制到用户的根目录即可。
那么,如何设置my.cnf文件中的参数呢?或者进一步说,哪些参数是我们可以设置的呢?所有这些参数都对MySQL服务器有着全局性的影响,但同时每一个参数都和MySQL的特定部分关系较为密切。例如,max_connections参数属于mysqld一类。那么,如何才能得知这一点呢?这只需执行如下命令:
% >/usr/local/mysql/libexec/mysqld --help
该命令将显示出和mysqld有关的各种选项和参数。要寻找这些参数非常方便,因为这些参数都在“Possible variables for option --set-variable (-O) are”这行内容的后面。找到这些参数之后,我们就可以在my.cnf文件中按照如下方式设置所有这些参数:
set-variable = max_connections=100
这行代码的效果是:同时连接MySQL服务器的最大连接数量限制为100。不要忘了在my.cnf文件[mysqld]小节加上一个set-variable指令,具体请参见配置文件中的示例
SQL Server 7.0 的数据迁移到MySQL上的一种方法
Microsoft SQL Server 7.0 的数据迁移到MySQL上的方法
Zhbforce
想必大家都很喜欢用Word打字,用Excel进行计算和规划,用PowerPoint作幻灯片进行展示…,但是这只用到了Office系列产品的很少的一部分功能。据调查,绝大部分用户只用到了Office产品的20%的功能,很少有人注意到Visual Basic for Application。实际上,熟悉掌握VBA的功能可以使你的工作事半功倍,尤其对会计、金融等专业来说,作出一套好的宏,几乎可以作到一劳永逸!最近,AutoCAD中也加入了VBA的功能,这不能不说这是一个趋势!
VBA的功能决不只是让病毒制造者用来制造麻烦的,VBA能被用来制造病毒的同时也正说明了其功能的强大与易用!利用ADO对象,可以很方便的进行数据库操作!下面就是一个简单的数据交换的例子:
由于ADO对象不直接支持MySQL,所以必须先安装MyODBC, 后者也是一个免费产品,在www.mysql.org上有下载,安装好了MyODBC, 就可以在ODBC数据源管理中配置一个数据源名称,把它指向你想连接的MySQL数据库。代码如下:
Sub connectMySQL()
'通过MyODBC去连接MySQL数据库,并将Microsoft SQL Server 7
'的数据转进mysql中
Dim sConnect As String, sSql As String, i As Long
Dim cnMSSQL As New ADODB.Connection
Dim cnMySQL As New ADODB.Connection
'声明并创建对象 连接
Dim rs As New ADODB.Recordset '声明并创建对象 记录集
Dim cm As New ADODB.Command '声明并创建对象 命令
sConnect = "dsn=mysql1" '指定MySQL的数据源名称
cnMySQL.Open sConnect '连接到 mysql
sConnect="Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;pwd=123456;Initial Catalog=softdown;Data Source=ntserver"
'连接到 ms sql server 7
cnMSSQL.Open sConnect
'sSql = "create table softinfo (softNum smallint,softname varchar(70),softdesc blob," & _
"softpath varchar(30),softleng varchar(10),softclass varchar(10),softsugest tinyint(1)," & _
"softdown smallint(4))" '创建新的MySQL数据表语句
sSql = "select * from softinfo order by softnum"
rs.Open sSql, cnMSSQL, 1, 1
在SQL2000查询中使用XDR的例子
XDR不会不知道吧?就是简化的XML-Data啦。现在示范一个如何实现这样的查询
SELECT o.OrderID, o.OrderDate from Orders o, Customers c,
WHERE o.CustomerID = c.CustomerID and c.CompanyName = ?
Code:
<%@ Language=VBScript %>
<%
Dim sConn
sConn = "Provider=SQLOLEDB; Data Source=(local); Initial Catalog=Northwind; User ID=SA;Password=;"
Dim adoConn
Set adoConn = Server.CreateObject("ADODB.Connection")
adoConn.ConnectionString = sConn
adoConn.CursorLocation = 3 'adUseClient
adoConn.Open
Dim adoCmd
Set adoCmd = CreateObject("ADODB.Command")
Set adoCmd.ActiveConnection = adoConn
adoCmd.CommandText = "Customer[@CompanyName=""Tortuga Restaurante""]"
adoCmd.Dialect = "{ec2a4293-e898-11d2-b1b7-00c04f680c56}"
adoCmd.Properties("Mapping Schema") = "Orders.xml"
adoCmd.Properties("Base Path") = "C:INETPUBWWWROOTPBA"
adoCmd.Properties("Output Stream") = Response
Response.write "<XML ID='MyDataIsle'>"
adoCmd.Execute , , 1024 'adExecuteStream
Response.write "</XML>"
%>
Result:
<XML ID="MyDataIsle">
<Customer CustomerID="TORTU" CompanyName="Tortuga Restaurante">
<Order CustomerID="TORTU" OrderID="10276" OrderDate="1996-08-08T00:00:00" />
<Order CustomerID="TORTU" OrderID="10293" OrderDate="1996-08-29T00:00:00" />
<Order CustomerID="TORTU" OrderID="10304" OrderDate="1996-09-12T00:00:00" />
<Order CustomerID="TORTU" OrderID="10319" OrderDate="1996-10-02T00:00:00" />
<Order CustomerID="TORTU" OrderID="10518" OrderDate="1997-04-25T00:00:00" />
讨论SELECT TOP N 问题
Hi, everyone:
本贴讨论SELECT TOP N问题.
现在正在一家计算机公司兼职,开发ASP应用. 在最近的一个商业项目里有这样一个需求:用户在查询时,只需要按照某(些)列排序后TOP 20的纪录. SQL SERVER 7很好地支持了TOP N 操作,但考虑到系统移植问题, 我又考虑在其他几个主流DBMSs中如何实现. 鉴于只有DB2 UDB 7,ORACLE 8i,SQL SERVER 7,本贴仅讨论这三个DBMS.
简单地说,TOP N问题就是:在SELECT中,仅选择按照某(些)列排序后TOP N的纪录. 考虑到等值问题,又可以分为两种: 一是仅仅返回N条纪录(M 1), 二是还包括所有于第N条等值的纪录(M 2). 当然最内层的子查询也可以有其他的子句, 或者TOP N也可以应用在没有ORDER BY的情况下,这样更简单.
1. SQL SERVER 7: 用 TOP N (WITH TIES)
M1:
SELECT TOP N * FROM MYTABLE ORDER BY ORD_COL;
M2:
SELECT TOP N WITH TIES * FROM MYTABLE ORDER BY ORD_COL;
注: SQL SERVER 7提供了PERCENT N WITH TIES, ACCESS 中提供了TOP N,但含义是M 2.
2. ORACLE 8i: 用 ROWNUM<=N
M1:
SELECT * FROM
( SELECT * FROM MYTABLE ORDER BY ORD_COL DESC)
WHERE ROWNUM<=N
M2:
SELECT * FROM MYTABLE WHERE ORD_COL>=
(SELECT MIN(ORD_COL) FROM
( SELECT * FROM MYTABLE ORDER BY ORD_COL DESC)
WHERE ROWNUM<=N)
ORDER BY ORD_COL DESC
注意以下两种错误用法:
WRONG 1:
SELECT * FROM MYTABLE
WHERE ROWID<=N
ORDER BY ORD_COL DESC;
WRONG 2:(因为WHERE ROWNUM<=N 在ORDER BY 前执行)
SELECT * FROM MYTABLE
WHERE ROWNUM<=N
ORDER BY ORD_COL DESC;
3: DB2
用FETCH FIRST N ROWS ONLY
M1:
SELECT * FROM MYTABLE
ORDER BY ORD_COL DESC
FETCH FIRST N ROWS ONLY
M2:
没有找到,因为DB2不允许在FROM中嵌套有ORDER BY子句的子查询.
还不清楚ORACLE的M 2有没有更好的办法,以及其他的DBMS如何实现TOP N操作,请其他朋友补充.
关于在 win2000 下安装 mysql 的一些问题!
前一段时间,发表了一编安装mysql的文章,结果有很多的朋友来问相关的问题。(太多了,应付不了)
1. 关于在其他目录安装mysql
ljf@sinonets.net.cn的朋友问:
我在win 2000下安装 mysql-shareware-3.22.32-win,希望改变路径,如d:win32appmysql但导致mysql服务无法启动,改变:d:my.cnf文件里所有相关路径为d:win32appmysql也不行
方法如下:
如你把目录转移就要这样来启动mysql
D:win32appmysqlinmysqld --basedir D:win32appmysql
net start mysql
2.从旧的版本升级
windymail@sina.com的朋友问:
我按照您的文章 win2000下安装mysql-shareware-3.22.32-win时遇到几个问题想请教您一下
我在运行c;mysqlinmysql-shareware --install时出现了failed to service 的信息
我以前安装的是3.11的版本
方法如下
请把原 3.11 的文件和reg里关于它的东西完全清除。然后再安装.
在清除之前要把你的 mysql 停止(
net stop mysql
mysqladmin --user=root --password=your password shutdown
),否则的话~~~~~
3.mysql的数据库在那里??LINUX那里吗?
dao,mysql安装在win2000上那数据库当然是在……
4.那里可以下载?
在这里就有啊
我的
e-mail:freeboy@popsun.com
欢迎来韶关热线找我讨论关于服务器和asp的问题。在bbs或者chitchat都可以找到。我的ID是freeboy。到了就说找网管就OK了。
游标操作时进行Update应注意的一个问题
在进行游标操作时,如果你使用了Order by 子句,但Order by 的字段没有索引, 则会导至游标为只读属性, 并且不能指定
为for Update状态.
解决办法有去掉Order by 子句或者对Order by的字段进行索引.
如何在应用程序中避免死锁问题?
任何基于锁的并发系统的一个不可避免的特点是在某些条件下系统可能阻塞。当一个连接占有一个锁而另一个连接试图改变锁的状态时,第二个连接要么等待第一个连接释放锁,要么因此而被阻塞。
为了获得最好的可扩展性,性能和并发能力,在设计应用程序和查询语句时,应该注意尽量缩短事务的长度, 并且减少占有锁的时间。大多数并发问题往往出现在应用程序和数据库的设计阶段,因此,设计阶段如果充分考虑这个因素至关重要。
否则,应用程序就会存在潜在的潜能缺陷, 而且一般要到应用程序扩展性测试时才被发现。
事务日志被填满的原因是什么?
SQL Server事务日志可能会被填满,这会阻止之后的数据库操作,包括UPDATE, DELETE, INSERT 和CHECKPOINT。
事务日志填满会导致1105错误:
Can't allocate space for object syslogs in database dbname because
the logsegment is full。
If you ran out of space in syslogs, dump
the transaction log。
Otherwise use ALTER DATABASE or
sp_extendsegment to increase the size of the segment。
这种现象可能出现于任何一个数据库中,包括Master和TempDB。一些难以预见的因素可能消耗日志空间。
例如:
一个大型事务, 尤其像批量数据更新、插入或删除。
一个未提交的事务。
检查点处理程序截除时所需的带宽过大。
截除时超过阈值
上述各种条件互相作用的结果。
用于发布的标记事务没有被日志读取程序读走
SQL Server如何解决加密问题?
Microsoft SQL Server的6.0和6.5版本中,16位和32位客户软件在使用多协议网络库时设置加密选项可以进行数据在线加密。
SQL Server依靠Microsoft Windows NT RPC 应用程序接口来完成网络数据加密。
Windows NT RPC使用40位RC4加密方法。这种方法允许出口,所以美国和国际版的这种加密方法没有区别。
如何锁定MYSQL数据表
在进行数据表检查或修补时,可以先将数据表锁定,可确保数据表的安全:
mysql>LOCK TABLE tbl_name READ;
mysql>FLUSH TABLES;
将数据表锁定后再进行检查或修补的工作。完成后再解除锁定:
mysql>UNLOCK TABLES;
//LOCK TABLE tbl_name READ表示要锁定成只读状态,在这个状态下用户只能读取数据表,不能写入。
LOCK TABLE tbl_name WRITE则是更严格的锁定,用户不能读取也不能写入。
收集SQL Server统计信息
问:我需要在运行SQL Server的机器上定期收集诸如每秒处理事务数(tps)之类的统计信息。为此,我大量使用了Performance Monitor(性能监视器),但却不能得到DBA所需的SQL Server性能指标。请问是否存在能够轻松收集这类统计信息的实用工具?
答:针对SQL Server的Performance Monitor计数器之一便能收集tps,因此,使用Performance Monitor是捕获这项指标最便捷的方式。您可以通过Microsoft Windows® NT Server 4.0 Resource Kit或Microsoft Windows 2000 Server Resource Kit以服务的形式安装Performance Monitor。此外,我建议您阅读Steve Adrien DeLuca等人所著的《Microsoft SQL Server 7.0 Performance Tuning Technical Reference》以学习关于测试有用SQL Server性能数据的内容。
——Microsoft项目经理,Richard Waymire
怎样获得SQL Server的优化性能?
为了最大程度优化SQL Server的性能, 首先您必须确定几个方面。当这几个方面得到优化时,可以最大程度的提高整个系统性能。然后您可以针对这几个方面进行分析。否则,您可能事倍功半。
经验证明,SQL Server的性能提高主要取决于逻辑数据库设计,索引设计和查询设计。
反之,最大的性能问题也往往源于这几个方面的设计缺陷。
如果数据库性能是一个关注焦点,您应该首先着眼这几个方面,因为在此的很小的投资可以带来很大的利益。
而其它系统级的性能问题, 例如内存、高速缓存、 硬件等, 的确值得研究。经验证明系统在这些方面容量越大,性能越高。
SQL Server对现有硬件资源采用自动方式管理,从而减少系统级的手工调整。