Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » MobiLink - 服务器管理 » 使用 MobiLink 服务器技术 » MobiLink 性能 » 影响 MobiLink 性能的关键因素

 

调优 MobiLink 性能

实现 MobiLink 最优同步吞吐量的关键是同时并高效地执行多个同步过程。要同时启用多个同步过程,MobiLink 将不同的数据库工作线程池用于不同的任务。一个池专用于从网络读取上载数据并将其解开。另一个称为数据库工作线程的线程池将该上载应用于统一数据库,并从统一数据库获取要下载的数据。另一个数据库工作线程池专用于将下载数据压缩并发送到远程数据库。每个数据库工作线程通过同步脚本使用到统一数据库的单个连接以便应用和读取更改。

争用

最重要因素是避免同步脚本中的数据库争用。同其他多个客户端使用数据库的情形一样,当客户端同时访问数据库时,您希望将数据库争用降到最低。每个同步都必须修改的数据库行可能导致争用的增加。例如,如果您的脚本在行中包含自动增加的计数器,则对该计数器的更新操作就有可能成为瓶颈。

同步请求被接受(上限为 -sm 选项指定的值),上载的数据被读取并解开,以便针对数据库工作线程做好准备。如果同步请求多于数据库工作线程,多出的请求将排队等待空闲数据库工作线程。

您可以控制数据库工作线程和连接的数目,但 MobiLink 总会确保每个数据库工作线程至少拥有一个连接。如果连接数多于数据库工作线程数,多出的连接将空闲下来。多出的连接可能会对多个脚本版本有用,这一点将在下面进行讨论。

数据库工作线程数

除了同步脚本中的争用以外,影响同步吞吐量的最重要的因素就是数据库工作线程的数目。数据库工作线程的数目将控制统一数据库中可以同时进行的同步的数目。

测试对于确定数据库工作线程的最佳数目十分重要。

数据库工作线程数的增加将允许更多重叠的同步来访问统一数据库,并增加了吞吐量。但也会增加重叠同步之间的资源和数据库争用,因此可能会增加单个同步花费的时间。随数据库工作线程数目的增加,由单个同步更加耗时所产生的开销将逐渐超出由共存同步数目的增加所产生的收益,此时添加更多的数据库工作线程反而降低了吞吐量。可以通过实验确定您所处环境中数据库工作线程的最佳数目,但以下内容可能对您有所帮助。

对于上载,据性能测试显示,当数据库工作线程数目相对较少(绝大多数情况下,三至十个工作线程)时,可以得到最佳的吞吐量。浮动量取决于下列因素:统一数据库的类型、数据量、数据库模式、同步脚本的复杂性和使用的硬件。导致出现瓶颈的通常原因是:在统一数据库中同时执行上载脚本的 SQL 的各数据库工作线程之间的争用。

对于下载,当使用下载确认时,数据库工作线程的最佳数目取决于客户端到 MobiLink 连接的带宽和客户端的处理速度。对速度较慢的客户端而言,获取最佳的下载性能需要较多的数据库工作线程。这是因为下载比上载涉及更多的客户端处理和更少的统一数据库处理。当使用阻塞下载确认时,在远程数据库完成对下载的应用之前,数据库工作线程会一直被阻塞。对于非阻塞下载确认,不需要更多的工作线程。

当不使用下载确认时(缺省设置),客户端到 MobiLink 连接的带宽的影响将减弱,因为数据库工作线程可以在其它线程发送下载时自由处理其它同步。因此,数据库工作线程的数目不再那么重要。

可以并行发送许多下载—远多于数据库工作线程的数目。要获得最佳的下载性能,重要的一点是,MobiLink 服务器具有足够的 RAM 来缓冲这些下载。否则,下载将被分页到磁盘,因此可能会降低下载性能。要指定 MobiLink 服务器的内存高速缓存大小,请使用 -cm 选项。

请参见-cm 选项

如果 MobiLink 服务器开始分页到磁盘(可能因为并行处理的下载过多),考虑使用 -sm 选项来减少数据库工作线程的数目或限制被主动处理的同步总数。

请参见-sm 选项

关闭下载确认(缺省设置)可以减少用于下载的数据库工作线程的最佳数目,因为数据库工作线程不必等待客户端来应用下载。

请参见SendDownloadACK (sa) 扩展选项

如果要使用下载确认,则使用非阻塞下载确认可获得更好的性能(相对于阻塞下载确认)。在非阻塞确认模式下,当远程数据库应用下载时,服务器会重用数据库工作线程。这意味着可以不必增加数据库工作线程的数目,即可获得更佳的性能。

MobiLink 为获得最佳下载吞吐量和最佳上载吞吐量提供了两个选项。您可以指定数据库工作线程的总数以便优化下载吞吐量。您也可以对同时执行上载的工作线程数加以限制以便优化上载吞吐量。

-w 选项控制数据库工作线程的总数。缺省值为 5。

-wu 选项限制可以将上载同时应用于统一数据库的数据库工作线程的数目。缺省情况下,所有数据库工作线程都可以同时执行上载,但这样做可能导致在统一数据库中出现严重的争用现象。使用 -wu 选项,可以在仍使较大数目的数据库工作线程优化下载数据获取的同时,减少争用情况的发生。-wu 选项仅在其指定的数目少于数据库工作线程的总数时才起作用。

请参见-w 选项-wu 选项

MobiLink 数据库连接

MobiLink 将为每个数据库工作线程创建一个数据库连接。您可以使用 -cn 选项指定 MobiLink 创建一个较大的数据库连接池,但是,如果 MobiLink 并不需要关闭连接或使用不同的脚本版本,多余的连接就会空闲下来。

在两种情况下 MobiLink 会关闭一个数据库连接并打开一个新的连接。第一种情况是发生错误时。第二种情况是,如果客户端请求同步脚本版本,但所有可用的连接都没有使用该同步版本。

注意

每个数据库连接都与一个脚本版本相关联。更改版本时,必须关闭连接然后再重新打开。

如果您通常使用多个脚本版本,则可以通过增加连接数以减少需要 MobiLink 关闭和打开连接的次数。如果用于同步的连接数为数据库工作线程数与脚本版本数的乘积,则您完全不需要关闭和打开连接。

以下命令行给出了对具有两个脚本版本的 MobiLink 进行调优的示例:

mlsrv11 -c "dsn=SQL Anywhere 11 Demo" -w 5 -cn 10

因为用于同步的数据库连接的最大数为脚本版本数与数据库工作线程数的乘积,因此将 -cn 设置为 10 可确保数据库连接不被过多地关闭和打开。

请参见-cn 选项