5. ASE 架构:观察服务器

以下是对 ASE 架构的简要描述,以及如何更深入地了解它。为了概述 ASE 的运行情况和设置方式,我们将结合使用内部 ASE 命令和操作系统命令。

5.1. 进程

每台机器上运行的每个 ASE 服务器都将至少有一个操作系统进程,即dataserver二进制文件,并且可能有多个这样的进程在运行。单个服务器实例至少包含一个dataserver进程。在 Sybase 术语中,这种dataserver在共享内存中协作和通信的进程被称为引擎。在生产使用中,服务器机器上的一个 CPU 通常被预留为专用于托管每个 Sybase 引擎。然后,可以将引擎配置为占用此 CPU,即使没有活动工作,它也会空闲循环轮询新的传入客户端连接,以避免上下文切换。当然,这种行为是完全可配置的,并且在单 CPU 机器上运行一个或多个服务器实例没有问题 - 当然,这取决于这些服务器上的负载。只要每个实例都有足够的内存,并且它们在不同的 TCP 端口上启动,那么在一台机器上拥有多个实例(即使是不同版本)也没有问题。

一个简单的 ps 命令将显示dataserver进程(默认情况下您只有一个),Sybase 提供了一个名为 showserver 的实用程序,它只会显示活动的 Sybase 相关进程。sp_sysmon 存储过程将在给定的时间间隔内监视 ASE,然后转储出几页全局性能数据。“引擎”部分显示服务器的实际活动程度,而与操作系统级别显示的 CPU 使用率无关。

5.2. 物理存储

ASE 服务器对原始设备或文件执行 I/O 操作,这些设备或文件在内部表示为虚拟设备。一个数据库可以驻留在其中一个虚拟设备上,也可以分布在多个虚拟设备上,如果需要,一个虚拟设备可以容纳多个数据库。您应该将操作系统级别的设备文件放在快速磁盘上,并确保它们不会被其他应用程序或系统管理员的清理活动删除或破坏。虚拟设备的路径存储在 master..sysdevices 表中,您可以使用 sp_helpdevice 存储过程列出这些路径。

5.3. 网络

服务器侦听一个或多个 TCP 端口上的传入连接。当您连接时,您可以通过逻辑 Sybase 服务器名称来标识服务器。此逻辑名称列在 interfaces 文件中,供 ASE 服务器和客户端(如 isql)使用。当 ASE 服务器启动时,它会在 RUN_SERVER 文件中找到其名称,在 interfaces 文件中查找此名称,找到 master 条目,并在那里找到的 IP/端口上启动侦听器。当您启动 isql 时,它也会在 interfaces 文件中查找逻辑服务器名称,但查找的是 query 行。通常,这是相同的 IP 和端口,但这使您可以选择在多个不同的 IP 和端口上启动服务器,并配置网络不同部分的客户端以利用不同的路径连接到服务器。JDBC 不使用 interfaces 文件,而是允许您使用 IP 和端口作为 URL 的一部分。

您可以使用 netstatlsof -i 观察打开的端口和已建立的连接。也可以使用 tcpdumpEthereal 跟踪通信,这些实用程序支持 Sybase 客户端-服务器连接中使用的表格数据流 (TDS) 协议。

一旦客户端连接,它将在 ASE 内部作为任务(一个内部进程)可见。这些不会被视为单独的操作系统进程,但可以使用 sp_who 存储过程列出。

5.4. 内存

您可以配置希望 ASE 使用多少内存,从某个需要的最小值到操作系统和 ASE 版本组合允许的最大值。除了进行仔细的分析和巧妙的设计以及 SQL 编写之外,使用更多可用内存是使数据库在不更改硬件的情况下加速的原因。默认情况下,您允许分配给 ASE 的大部分内存用于缓存数据,以尽可能避免磁盘 I/O。另一部分内存用于以编译形式缓存存储过程,使这些存储过程可以随时重用,而无需频繁地从磁盘读取。较小的部分保留用于服务器所需的各种管理内存结构,用于跟踪每个用户连接、每个数据库等等。

在操作系统级别,您可以使用 ipcs -m 看到这个通常是连续的内存块。在 ASE 内部,您可以使用 sp_configure 读取和修改配置参数,例如总内存。有几种方法可以确定内存使用效率,性能和调优指南中解释了这门艺术。

5.5. 启动过程

您可以使用 startserver 实用程序启动服务器。这将调用您在命令行上指定的 RUN_* 文件。如果您在文本编辑器中打开此 RUN_SERVER 文件,您会发现它只是调用了dataserver可执行文件,其中列出了文件中的几个参数。这些参数在实用程序指南中有文档记录。服务器读取其配置文件(由其中一个参数指定),并分配该文件中声明的共享内存量(注意:这是以 2KB 页而不是字节配置的),然后为其各种用途执行其自身的内部内存分配。一旦内存可用,就启动初始化(您可以将其视为“挂载”)用于存储数据库的虚拟设备的过程。当验证这些设备可用且正常时,数据库必须进行恢复。这意味着读取预写式事务日志,并将其中记录的任何更改与实际存储的数据进行比较。根据需要重做和撤消事务,以使数据库达到干净且正确的状态。一旦此过程完成,数据库将在线。对于系统数据库,应用相同的过程,但 scratchpad 数据库 tempdb 除外,它将被 model 模板数据库完全覆盖,并且任何剩余空间都将被置零。最后,TCP 端口被打开,服务器准备好接受传入的客户端连接。