- 博客(1095)
- 资源 (4)
- 收藏
- 关注
原创 Oracle索引扫描(Index Scan)原理与示例
Index scan的概念参见《Database Concepts》第3章 3 Indexes and Index-Organized Tables 中的“”部分。先看基本概念:在索引扫描中,数据库通过遍历索引来检索行,使用的是语句中指定的索引列值。如果数据库针对某个值进行索引扫描,那么它将在 n 次 I/O 内找到该值,其中 n 是 B 树索引的高度。这是 Oracle 数据库索引背后的基本原理。如果一条 SQL 语句只访问索引列,那么数据库将直接从索引中读取值,而不是从表中读取。
2026-05-29 14:50:54
393
原创 Oracle数据库与 HugePage
在内存管理中,4 KiB的页面成为常规页面(ordinary page)。2 MiB的页面就称为大页(huge page)。
2026-05-29 14:50:40
531
原创 Oracle数据库不用绑定变量的危害
对于数据库开发者,Oracle数据库建议使用绑定变量(Bind Variables)。与绑定变量反其道而行之的是拼字符串或字面量(string literals),这是Oracle极力反对的。以下是Oracle官方或官网对使用绑定变量的背书。
2026-05-25 15:30:38
388
原创 TLPI 第23 章 读书笔记:Timers and Sleeping
计时器允许一个进程为自己安排在未来某个时间发生的通知。睡眠允许一个进程(或线程)暂停执行一段时间。本章描述了用于设置计时器和睡眠的接口。
2026-05-18 15:28:52
535
原创 TLPI 第22 章 练习:Signals: Advanced Features
笔记和练习博客总目录见:开始读TLPI。第 22.2 节指出,如果一个已停止的进程为 SIGCONT 信号建立了处理程序,并且该信号被阻塞,之后该进程由于收到 SIGCONT 信号而恢复执行,那么只有当 SIGCONT 信号解除阻塞时,处理程序才会被调用。请编写一个程序来验证这一点。回想一下,可以通过输入终端挂起字符(通常是 Control-Z)来停止进程,并且可以使用命令 kill –CONT(或者隐式地使用 shell 的 fg 命令)向进程发送 SIGCONT 信号。代码如下:测试如下:练习 22
2026-05-18 15:26:04
394
原创 带ORDER BY的WHERE语句如何建索引?
结果中只有 INDEX RANGE SCAN,没有 SORT ORDER BY。从结果看,CPU肯定是节省了。直觉是索引应包含所有列,并和ORDER BY的升降序保持一致。查看执行计划(会显示 SORT ORDER BY)场景2:索引包含 ORDER BY 字段。场景1:索引只包含 WHERE 字段。插入10万条测试数据。
2026-05-13 11:43:51
44
原创 TLPI 第22 章 读书笔记:Signals: Advanced Features
笔记和练习博客总目录见:开始读TLPI。本章完成了我们在第20章开始的信号讨论,涵盖了一些更高级的主题,包括以下内容:某些信号会导致进程生成核心转储并终止(表 20-1,第 396 页)。核心转储是一个文件,包含进程在终止时的内存映像。(“核心”一词来源于一种旧的存储技术。)这个内存映像可以加载到调试器中,以检查信号到达时程序代码和数据的状态。使程序生成核心转储的一种方法是输入退出字符(通常是 Control-\),这会生成 SIGQUIT 信号:在这个示例中,信息 Quit(核心已转储)是由 shell
2026-05-09 11:34:38
953
原创 TLPI 第21 章 练习:Signals: Signal Handlers
笔记和练习博客总目录见:开始读TLPI。实现 abort()。先看帮助abort(3):原书没有提供答案,所以我就机械的执行帮助中的步骤了。代码如下:测试:也可参看glibc中的源码实现:
2026-05-09 08:00:00
210
原创 Oracle数据库常用AWR脚本
这些脚本位于目录下,以awr开头,后缀为.sql。在各sql文件内部,有脚本的简单描述和用法说明。根据文件名的命名规律和官方文档,这些awr*.sql。
2026-05-08 10:34:39
355
原创 TLPI 第21 章 读书笔记:Signals: Signal Handlers
本章继续描述上一章中开始讨论的信号。它主要关注信号处理程序,并扩展了第20.4节中开始的讨论。
2026-05-08 08:00:00
1161
原创 TLPI 第20 章 读书笔记:Signals: Fundamental Concepts
内核从不为进程生成这些信号。进程可以使用这些信号来相互通知事件或进行同步。在早期的 UNIX 实现中,这两个信号是应用程序中唯一可以自由使用的信号。(实际上,进程可以相互发送任何信号,但如果内核也为进程生成其中一个信号,则可能会引起混淆。
2026-05-07 08:00:00
550
原创 TLPI 第19 章 读书笔记:Monitoring File Events
一些应用程序需要能够监视文件或目录,以确定所监视对象是否发生了事件。例如,图形文件管理器需要能够确定当前显示的目录中何时添加或删除文件,或者守护进程可能希望监视其配置文件以便知道文件是否已更改。从内核 2.6.13 开始,Linux 提供了 inotify 机制,它允许应用程序监视文件事件。本章描述了 inotify 的使用。inotify 机制取代了较早的 dnotify 机制,后者提供了 inotify 功能的子集。本章末尾将简要介绍 dnotify,重点说明为什么 inotify 更好。
2026-05-01 08:15:00
529
原创 TLPI 第18 章 读书笔记:Directories and Links
详情请参阅手册页。虽然在 SUSv3 中未指定,但大多数 UNIX 实现提供了 scandir()。在目录结束或发生错误时,readdir() 返回 NULL,在后者情况下设置 errno 以指示错误。
2026-04-30 08:15:00
1916
原创 TLPI 第17章 练习:Access Control Lists
笔记和练习博客总目录见:开始读TLPI。编写一个程序,显示对应于特定用户或组的 ACL 条目的权限。程序应接受两个命令行参数。第一个参数是字母 u 或 g,用于指示第二个参数标识的是用户还是组。(可以使用第 159 页列表 8-1 中定义的函数,允许第二个命令行参数以数字或名称的形式指定。)如果对应于给定用户或组的 ACL 条目属于组类,那么程序还应显示在 ACL 条目被 ACL 掩码条目修改后将适用的权限。列表 8-1 中定义的函数是指users_groups/ugid_functions.c。编译时要指
2026-04-30 08:00:00
107
原创 TLPI 第17章 读书笔记:Access Control Lists
第15.4节描述了传统的 UNIX(和 Linux)文件权限方案。对于许多应用程序来说,这种方案是足够的。然而,一些应用程序需要对特定用户和组授予的权限进行更精细的控制。为了满足这一需求,许多 UNIX 系统实现了对传统 UNIX 文件权限模型的扩展,称为访问控制列表(ACL)。ACL 允许为任意数量的用户和组指定文件权限。Linux 从内核 2.6 开始提供 ACL。每个文件系统对 ACL 的支持是可选的,并由内核配置选项在文件系统菜单下控制。
2026-04-29 08:15:00
732
原创 TLPI 第16章 练习:Extended Attributes
笔记和练习博客总目录见:开始读TLPI。编写一个程序,用于创建或修改文件的用户扩展属性(EA)(即 setfattr(1) 的简化版本)。文件名以及 EA 的名称和数值应作为命令行参数提供给程序。先看概念 setxattr(2):以及getfattr的编码说明:造测试数据:代码的框架拷贝自xattr/t_setxattr.c。关键是要做hex 格式和base64格式的解码。代码如下:测试如下:
2026-04-29 08:00:00
231
原创 TLPI 第16章 读书笔记:Extended Attributes
(在 shell 会话结束时,user.x 的值是空字符串,而 user.y 是未定义的。默认情况下,getfattr 只列出用户 EA 的值。
2026-04-28 08:15:00
624
原创 TLPI 第15章 练习:File Attributes
笔记和练习博客总目录见:开始读TLPI。第15.4节包含了关于各种文件系统操作所需权限的几个说明。使用shell命令或编写程序来验证或回答以下问题:a) 从文件中移除所有所有者权限会拒绝文件所有者访问,即使组和其他用户有访问权限。b) 在一个具有读权限但没有执行权限的目录上,可以列出目录中的文件名,但无法访问文件本身,无论文件本身的权限如何。c) 为了创建新文件、以读方式打开文件、以写方式打开文件以及删除文件,父目录和文件本身分别需要什么权限?重命名文件时,源目录和目标目录需要什么权限?如果重命名操作
2026-04-28 08:00:00
642
原创 TLPI 第15章 读书笔记:File Attributes
我们在第 15.4 节中描述了文件权限位。现在,我们只需注意权限位中最低的 9 位是所有者、组和其他类别的读、写和执行权限。
2026-04-27 08:15:00
881
原创 TLPI 第14章 练习:File Systems
文件应按照其名称生成的随机顺序创建,然后按数字递增顺序删除(即与创建顺序不同的顺序)。测量不同 NF 值(例如在 1000 到 20000 的范围内)以及不同文件系统(例如 ext2、ext3 和 XFS)下所需的时间。🔔 教训,open系统调用的第三个参数mode是必须指定的,否则新创建文件的权限属性是不可预测的(垃圾值)。原因可能给inode有关,因为inode是一个list,如果按序生成,删除时总是删除第一个节点,list的检索和维护会简单很多。根据您提供的新数据,以下是生成的Markdown表格。
2026-04-27 08:00:00
526
原创 TLPI 第14章 读书笔记:File Systems
在第4、5和13章中,我们研究了文件I/O,特别关注常规(即磁盘)文件。本章的大部分内容涉及文件系统,文件系统是由组成的有组织的集合。我们解释了一系列文件系统的概念,有时会以传统的Linux ext2文件系统作为具体示例。我们还简要介绍了Linux上可用的一些日志文件系统。本章最后讨论了用于挂载和卸载文件系统的系统调用,以及用于获取挂载文件系统信息的库函数。
2026-04-26 08:15:00
674
原创 TLPI 第13章 练习:File I/O Buffering
笔记和练习博客总目录见:开始读TLPI。使用 shell 的内置命令 time,尝试在你的系统上对清单 4-1(copy.c)中的程序进行操作计时。a) 尝试不同的文件和缓冲区大小。你可以在编译程序时使用 –DBUF_SIZE=nbytes 选项来设置缓冲区大小。b) 修改 open() 系统调用以包含 O_SYNC 标志。对于不同的缓冲区大小,这对速度有多大影响?c) 尝试在一系列文件系统上进行这些计时测试(例如 ext3、XFS、Btrfs 和 JFS)。结果是否相似?从小缓冲区到大缓冲区时趋势是
2026-04-26 08:00:00
440
原创 TLPI 第13章 读书笔记:File I/O Buffering
为了提高速度和效率,I/O 系统调用(即内核)和标准 C 库的 I/O 函数(即 stdio 函数)在操作磁盘文件时都会缓冲数据。在本章中,我们将描述这,并考虑它们如何影响应用程序性能。我们还将研究各种影响和禁用这两种类型缓冲的技术,并介绍一种称为直接 I/O 的技术,它在某些情况下可用于绕过内核缓冲。
2026-04-25 08:15:00
845
原创 TLPI 第12章 练习:System and Process Information
笔记和练习博客总目录见:开始读TLPI。编写一个程序,根据程序命令行参数中指定的用户名,列出该用户运行的所有进程的进程ID和命令名称。(第159页的代码清单8-1中的userIdFromName()函数可能对你有用。)这可以通过检查系统中所有/proc/PID/status文件中的Name:和Uid:行来实现。遍历系统中所有/proc/PID目录需要使用readdir(3),相关描述见第18.8节。请确保你的程序能够正确处理以下情况:在程序确定某个/proc/PID目录存在之后、尝试打开对应的/proc/P
2026-04-25 08:00:00
368
原创 TLPI 第12章 读书笔记:System and Process Information
在本章中,我们研究访问各种系统和进程信息的方法。本章的主要重点是讨论 /proc 文件系统。我们还描述了 uname() 系统调用,该调用用于检索各种系统标识符。
2026-04-24 08:15:00
789
原创 TLPI 第11章 练习:System Limits and Options
笔记和练习博客总目录见:开始读TLPI。如果你有机会,尝试在其他 UNIX 实现上运行清单 11-1 中的程序。其他UNIX,此处选择的是FreeBSD。首先参考博客VirtualBox上安装FreeBSD,创建一个FreeBSD系统。然后参考博客在FreeBSD上编译TLPI示例代码,生成libtlpi.a静态链接库。11-1就是syslim/t_sysconf。对比以下Linux中的输出:练习 11-2.尝试在其他文件系统上运行清单 11-2 中的程序。11-2就是syslim/t_fpathco
2026-04-24 08:00:00
250
原创 在FreeBSD上编译TLPI示例代码
FreeBSD 下的默认 make 不是 GNU make,而是 FreeBSD 自研的 BSD make(也叫 Berkeley make)。(但实际后续验证了book版本也没有问题)从共享目录导入示例文件。FreeBSD下没有文件。FreeBSD下没有文件。的说明,此处选择的是。版本的示例文件,而非。
2026-04-23 08:15:00
182
原创 VirtualBox上安装FreeBSD
Windows操作系统,VirtualBox Version 7.1.8 r168469 (Qt6.5.3)。想安装FreeBSD操作系统。为虚机配置port forwarding,例如将宿主机的8822端口映射为客户机的22端口。我们把配置SSH放在第一步,是因为终端字符界面太丑了,而且也没法拷贝粘贴。因为我的VMM是VirtualBox,所以要下载vhd格式。最终我选择的是默认安装。配置共享目录后,需重启才能生效。虚机提供多种格式,一定要先读。
2026-04-23 08:00:00
402
原创 TLPI 第11章 读书笔记:System Limits and Options
每个 UNIX 实现都会,并提供——或选择不提供——在各种标准中定义的选项。虽然我们可以将假定的限制和选项硬编码到应用程序中,但这会由于系统限制和选项会影响应用程序的功能,便携式应用程序需要有方法来确定限制值以及是否支持某些选项。SUSv3 指定了符合规范的实现可能强制执行的一系列限制,以及一组选项,每个选项在特定系统上可能提供也可能不提供。本章将描述其中的一些限制和选项,并在后续章节的相关内容中描述其他限制和选项。
2026-04-22 08:15:00
602
原创 TLPI 第10章 练习:Time
假设一个系统中调用 sysconf(_SC_CLK_TCK) 返回的值为 100。假设 times() 返回的 clock_t 值是一个无符号的 32 位整数,那么这个值循环并重新从 0 开始需要多长时间?对 clock() 返回的 CLOCKS_PER_SEC 值进行相同的计算。这个练习的目的,是了解clock()和 times的不同,虽然返回的类型一样,但单位是不同的,这也就导致存储的上限也不同。
2026-04-22 08:00:00
434
原创 TLPI 第10章 读书笔记:Time
大多数计算机架构都有内置硬件时钟,使内核能够测量实时间和进程时间。在本章中,我们将研究处理这两种时间的系统调用,以及用于在人类可读表示和内部时间表示之间转换的库函数。由于人类可读的时间表示依赖于地理位置以及语言和文化习惯,对这些表示的讨论将引导我们研究时区和区域设置。
2026-04-21 08:15:00
649
原创 TLPI 第9章 练习:Process Credentials
笔记和练习博客总目录见:开始读TLPI。假设在以下每种情况下,进程的初始用户 ID 集合为 real=1000, effective=0, saved=0, file-system=0。在执行以下调用之后,用户 ID 的状态会是什么?a) setuid(2000);b) setreuid(–1, 2000);c) seteuid(2000);d) setfsuid(2000);e) setresuid(–1, 2000, 3000);先看下帮助:这里说的是指ruid,euid,suid,fsuid
2026-04-21 08:00:00
404
原创 TLPI 第9章 读书笔记:Process Credentials
每个进程都有一组关联的数字用户标识符(UID)和组标识符(GID)。有时,这些被称为进程凭证。在本章中,我们将详细探讨这些进程标识符的目的,并描述可用于检索和更改它们的系统调用和库函数。我们还讨论了特权进程和非特权进程的概念,以及 set-user-ID 和 set-group-ID 机制的使用,这些机制允许创建以指定用户或组的权限运行的程序。
2026-04-20 08:15:00
675
原创 TLPI 第8章 读书笔记:Users and Groups
每个用户都有一个唯一的登录名和一个关联的数字用户标识符(UID)。用户可以属于一个或多个组。每个组也有一个唯一的名称和组标识符(GID)。用户和组ID的主要目的是确定各种系统资源的所有权,以及控制访问这些资源的进程所获得的权限。例如,每个文件属于特定的用户和组,每个进程都有多个用户和组ID,用于确定谁拥有该进程以及在访问文件时拥有什么权限(详细信息见第9章)。在本章中,我们将查看用于定义系统上用户和组的系统文件,然后描述用于从这些文件中检索信息的库函数。
2026-04-19 08:15:00
390
原创 TLPI 第7章 练习:Memory Allocation
笔记和练习博客总目录见:开始读TLPI。修改清单 7-1(free_and_sbrk.c)中的程序,在每次执行 malloc() 后打印出当前程序断点的值。运行程序时指定一个较小的分配块大小。这将演示 malloc() 并不是每次调用都使用 sbrk() 来调整程序断点,而是周期性地分配较大的内存块,然后将其中的小块返回给调用者。此程序在memalloc目录下。其用法:前面2个参数控制内存分配,后面三个控制内存释放。只有1处使用了malloc:然后在brk(2)中:要理解这个练习,还需参考图Figure
2026-04-19 08:00:00
317
Oracle自治数据库自动分区报告
2022-11-16
同名微信号,发布长沙的视频
2024-02-22
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅