(From comp.databases.oracle.server, with corrections) Subject: AST's in RAC environment > AST, for those who don't know that is a VAX/VMS abbreviation for > "Asynchronous System Trap" and was, essentially, VMS way of executing > your code in the context of another process. Blocking AST was an AST > which elevated IPL (Interrupt Priority Level) above 2, which was the > interrupt priority of the system clock (VMS internals, from the time > when dinosaurs were roaming the Earth and when I was teaching a course > called "tuning VMS"). The term AST is used in the context of RAC. > > I didn't get the answer what is AST supposed to be, the answer was > that AST is "something like interrupt". Well, I am not a complete > stranger to Unix and I've never seen serious people using terms like > "something like interrupt". Gopal obviously doesn't know the principles > of that implementation or what is it supposed to do. I am, therefore, > forced to ask the general public: is there anybody , on the vast expanses > of Usenet, who can precisely define what is AST, in the context of the > Real Application Cluster? The question is: does anybody know how do these > "AST" things really work, in terms of sockets, signal, IPC and other > familiar Unix mechanisms? Original AST's were using architecture specific > features of NVAX and CVAX chips. > Until now, I was making sure that any oraclite trying to look smart by > mentioning AST and RAC in the same sentence in my presence takes home a > memorable experience, but I do have nothing but respect for Gopal's > knowledge and skills. I was dismissing the AST talk as the terminology > used by the old VMS aficionados, but now I am confused. What is going on > here? Metalink doesn't come up with anything when "RAC AST" is entered > into the search engine. Where does this AST snake oil come from? I > came accross the expression in Steve Adams internals book, but AST isn't > defined there, either. Is the debate between you and Gopal only about whether AST is "something like interrupt"? I don't have any book on VMS internals. But the authors of "Design and Implementation of 4.3BSD UNIX Operating System" are knowledgeable about VAX architecture. They define AST as --- begin cut --- On the VAX, a software-initiated interrupt to a service routine. ASTs enable a process to be notified of the occurrence of a specific event asynchronously with respect to its execution. In 4.3BSD, ASTs are used to initiate process rescheduling. --- end cut --- IBM HACMP glossary also defines it as an interrupt (www.tu-darmstadt.de/hrz/unix/ibm/documentation/HACMP/glossary/glossary.html#970727) Being ignorant of VMS internals, I think it's quite natural to think of an AST as a specific type of interrupt. After all, that's what T means, a trap, or an interrupt (traps and interrupts are different if you're picky). In fact, when I read documents on Metalink that have "AST" in them, I just conveniently substitue "interrupt" for "AST" and it sounds about right. (You'll find numerous Metalink articles by searching for "AST OPS", no quotes, and checking the Bug and Archived articles checkboxes) How do OSes other than VMS such as UNIXes emulate ASTs? Bug:596761 says "dlm uses sigusr1 to signal the process for ASTs". That was on Siemens Reliant Unix running Oracle 7.3.3. But process A can send a signal to process B only if A and B can see each other. So the user-defined signals to implement ASTs must be for local ASTs. (Actually, I don't quite understand. If it's local, why do ASTs at all?) Anyway, to communicate between processes on different nodes, UNIX sockets must be used (see www.ixora.com.au/q+a/misc.htm#5_11_1999). Oracle calls this IPC (inter-process communication). But this is not traditional SysV IPC, where two processes on the *same* host communicate with each other; instead this is the "Network IPC" (see Richards Stevens, Stephen Rago's "Advanced Programming in the UNIX Environment", 2nd ed.). At OS level, they rely on UDP or whatever "oradebug ipc" says. In case you're interested in exploring, there's an event that sounds relevant, ORA-10430 (enable tracing of global enqueue service AST calls). I haven't tested it. Bugs 3201717 and 3649648 show the levels you can use. Note:112997.1, Bug:1954622, and Bug:558063 (together with Note:61377.1) also look interesting. Some AST-related statistics are visible in v$dlm_misc (a group-by of x$kjisft on stat name). I see a column ast_event0 in v$ges_blocking_enqueue and v$ges_enqueue (or in OPS, v$dlm_all_locks and v$dlm_locks). But I can't get any value other than 0 in my test on 8.1.7 OPS or 10g RAC. There's an "scginq AST call" wait event. I don't see it recorded it in my v$system_event (perhaps I have to enable something first). In 8i, there're more wait events, global cache pending ast(s). In older versions, there may be "lm ast latch" and "dlm cr bast queue latch". Other than playing with "oradebug lkdebug" which generates traces about AST queues and locks pending AST, I guess you have to trace processes like LCKn or LMDn.