"867-5309/Jenny" is a song written by Alex Call and Jim Keller and performed by Tommy Tutone that was released on the album Tommy Tutone 2 (1981) through Columbia Records. It peaked at number four on the Billboard Hot 100 and number one on the Rock Top Tracks chart in April 1982. The song led to a fad of people prank calling unsuspecting victims by dialing 867-5309 and asking for "Jenny".
== Creation ==
Lead guitarist Jim Keller, interviewed by People in 1982, said: "Jenny is a regular girl, not a hooker. Friends of mine wrote her name and number on a men's room wall at a bar. I called her on a...
The last time I read about that particular Woeing incident, they did have a genuine choice to make. The DoJ charges were questionable, but going through a trial and being found guilty comes with potentially much more severe consequences. Being a company with a criminal record is apparently quite inconvenient, especially if you're in the government contracts business.
the big shocker for me in that article is the absence of the phrase "the company will admit to no wrongdoing"
low bar to jump for sure, but generally speaking i assume corporate megaliths get to pay out the settlement and have no legal finding of fact against them
maybe that'll still happen, but the phrasing "plead guilty" implies not i reckon
Haven't read the latest yet, but I also seem to recall they were a few days away from end of a probationary period when the incident occurred. They don't have much luck
@Zikato The deadlock you sent me is reasonably well explained already, though it's a little handwavy in places. The main question I think, is why the resources are acquired in the opposite order. One takes COMPILE then Sch-S on stats, the other has Sch-S on stats, then looks to acquire COMPILE. The only role of the UPDATE STATS is to do the partitioning thing on Sch-M so the normally compatible Sch-S requests end up as part of the cycle.
We understand now how a e.g. a filtered index can cause a COMPILE lock to be requested on a table (more details below).
When queries compile, they can load indexes and stats at different times, on demand, depending on when the optimizer needs the information for various purposes (not just cardinality estimation). It's perfectly possible for one query to acquire Sch-S earlier than the other (they are different queries, after all). These locks aren't released until the compilation is complete, so you just see increasing refcounts if requests are repeated.
One query happens not to load that stat early. After it acquires COMPILE, it finds it needs the stats during the binding process for the index filtering predicate. It can't get it due being on a scheduler with a Sch-M partitioned lock. The other query acquires Sch-S successfully due to being on a higher numbered scheduler. Later, it finds it needs to rebind the filtering predicate and can't get the required COMPILE lock, and we have a deadlock.
I suppose the other thing to be clear on is this is the result of run-of-the-mill statement-level recompilation for the two queries (not the stats update job). COMPILE locks for dependencies like filtered index predicates are acquired on recompile. COMPILE locks for procedures are only acquired on a fresh, complete compile.
If it helps, the thing the COMPILE lock is protecting in the filtered index case is inserting the PROCHDR cache entry for the bound tree corresponding to the filter predicate.
Statement-level recompilation is very much the norm. Whole-procedure recompilation used to be the only possibility of course. I think it's safe to say the only time you get a whole proc compile now is when the proc isn't in cache.
But that's what I'm after right? It only compiles again if the proc / bound tree is not in the cache. So I'm trying to find out why was it removed from the cache
@Zikato No, there are two distinct issues. Whole procedure compile is not relevant for the deadlock case. Plans are cached in OBJCP (or SQLCP). Bound trees are cached in PROCHDR. They're quite separate.
So, you need a COMPILE lock on the procedure if you're planning on inserting a plan for it into the OBJCP cache. You need a COMPILE lock on the closest lockable thing if you're going to be caching a bound tree (aka algebrized tree, normalized tree).
For a SQL expression on a filtered index, the table gets the COMPILE lock.
As mentioned, proc plans are really an array of plans, each which can be recompiled without affecting the proc plan or needing a proc COMPILE lock.
So for the blocking scenario, the real blocked resource was obfuscated by the COMPILE locks? I still don't understand what other things were at play that it caused blocking this time but statement recompiles happen all the time
There is still stuff I'm missing related to stats. I've monitored auto-stats update and even though ASYNC is enabled I see many more instances of sync (Load and Update stats)
You probably need to work on understanding that. If sync stats are happening somehow, that could be the missing link
Does anyone here have to look at Kusto data constantly? I have some questions around how you use it to be efficient at repetitive tasks that might have slightly varying inputs.
@Zikato Thanks! I'm finding myself using similar (but not the exact same) queries to investigate issues. I don't want to manually do a bunch of stuff but I also don't want to make some crazy 500 join monstrosity with all the possible items and options and data from 10-25 different kusto tables.
I'm trying to figure out how other people are automating this without writing a front end to do it - I'm using kusto explorer right now.
For example, some queries may have anywhere from 3 to 15 inputs (I am currently using kusto explorers variables assignment and placeholders but open to other options) whereas others are based on the output of the previous query or a subset of those. In SQL I'd just make some stored procedures and whatnot, Kusto has Functions but I haven't touched those yet and unsure if I'd have the ability to create any in these clusters.