Search Results

Search found 16524 results on 661 pages for 'cross browser'.

Page 145/661 | < Previous Page | 141 142 143 144 145 146 147 148 149 150 151 152  | Next Page >

  • How to directly send *.php.html files to browser without passing throught PHP? (Apache)

    - by Cédric Girard
    Hi, on my Apache/PHP server, file test.php.html is parsed by PHP, while test.html is not. PHPDOC create a lot of *.php.html files, with a XML header wich is a pain for PHP parser, but how to tell Apache not to pass *.php.html file to PHP and just send back the file to browser? My php.conf file <IfModule prefork.c> LoadModule php5_module modules/libphp5.so </IfModule> <IfModule worker.c> LoadModule php5_module modules/libphp5-zts.so </IfModule> AddHandler php5-script .php AddType text/html .php What can I do? Thanks, Bests regards Cédric

    Read the article

  • [metasploit] Has anyone gotten multi/browser/java_signed_applet to work?

    - by marc
    Welcome, Today i want test following exploit "exploit/multi/browser/java_signed_applet" on my Ubuntu 10.04 desktop using Metasploit framework. I'm following that guide: http://pauldotcom.com/wiki/index.php/Episode185 When im trying to start exploit, i got error: JVM not initialized. You must install the Java Development Kit, the rjb ruby gem, and set the $JAVA_HOME variable. [-] Falling back to static signed applet. This exploit will still work, but the CERTCN and APPLETNAME variables will be ignored. I have installed sun-java6-jdk, and gem install rjb And patch to JAVA look working because: ls $JAVA_HOME bin ext jre LICENSE README.html COPYRIGHT include lib man THIRDPARTYLICENSEREADME.txt If anyone, have any idea... Except installation of backtrack what is not possible... Because i need use it on my Ubuntu, (have to virtualize XP for test) regards

    Read the article

  • Why does a browser dialog come up when an xmlhttprequest sends the wrong / no auth?

    - by Kyle
    How come the major browsers all bring up a login dialog when an xmlhttprequest does auth wrong or doesn't send it? I mean isn't this poor UI? Now a days it seems like a lot of people try http auth in jQuery, because theoretically it is quite easy - until the user fails to enter the correct data and is presented with the browsers dialog, which gets in their way, and they might have no idea what to do with it or why it's there? I don't know too much about these low level browser specifications but can someone bring this up with the RFC or webkit/gecko developers? jQuery digest auth could be powerful and user friendly if this was fixed. ** It seems like apache could also fix the problem on their side by not sending the header, but whichever one is the most secure way of doing this would be nice.

    Read the article

  • Cannot access https sites through any browser on Win XP?

    - by manwood
    This isnt a firewall issue, I can telnet to gmail with no problems, but all browsers (chrome, IE, firefox) return a This web page is not available. error when tring to access it through the browser. I can access the same pages, using the same browsers, on the same machine, but through a different user account with no problem. What the hell is going on? Help appreciated. Edit: This is definitely a windows setup issue - I have just created a new admin account and can access https with problems. This is seriously infuriating.

    Read the article

  • Please recommend tools for PC, browser, home network performance problems?

    - by mobibob
    My client is experiencing some odd response behavior in their browser for the past few days. Classic, "nothing has changed" so I am starting at ground zero. Browsing a website will timeout or take a ridiculous time to load -- other times, the same site and query is immediately responsive. Once a connection is established, video streams are uninterrupted. The home network hosts a website, but it is not experiencing any activity in Apache's 'access.log' I am using speedtest.net to check if the ISP through the internet is 'OK' -- which looks typical (average +/-). I have to suspect the home network is beaconing or something very abnormal, but I don't know where to start.

    Read the article

  • How to change the audio output device in Firefox or any other modern browser?

    - by Zanami Zani
    I'm trying to play music through Ventrilo and currently I use Virtual Audio Cable. The way it works is that in foobar2000 (a music playing program) I set the output device in preferences to Virtual Audio Cable. Then in Ventrilo I log in to another name and set the input device to Virtual Audio Cable. This routes the music through the Virtual Audio Cable and allows me to play the music through Ventrilo. However, I would also like to change the output device for Firefox (or any other browser) or "Plugin Container for Firefix" to Virtual Audio Cable so that I could play music from Pandora or YouTube on to Ventrilo. Unfortunately I could not find an option for this anywhere.

    Read the article

  • How do I change the default browser in lotus notes when opening links in emails?

    - by peter
    I can't seem to figure out how to change the default browser for email/sametime links from opening with lotus notes to say chrome/firefox/ie. All links open with a new tab in lotus notes, which always gives scripting errors as it appears to be using ie as it's rendering engine to open up webpages. Is there something in the preferences that I'm missing that I'm not seeing? I've hunted around for awhile and am not seeing an option to change it. I've also tried to change it within the internet options for default applications, but nothing's working. I'm using lotus notes 8 on windows xp if that helps anyone helping me.

    Read the article

  • How to stop iPhone's safari browser from silently dropping tabs when you open a 9th tab?

    - by MattH
    Currently in the iPhone safari mobile browser, if you have 8 tabs open and open a new tab, the new tab opens as requested, but one of the existing tabs is silently discarded. Is there any known way to change this behaviour, e.g. to prompt me first and allow me to choose which tab to close, or to open the 9th tab, or to at least have visibility of what tab was closed? When I open something in a new tab it's because I want to come back to the previous tab later, so this conflicts with the way I usually browse the web. My current workaround is to manually monitor the tab count -- i.e. to check that the count is 7 or less before opening a new tab.

    Read the article

  • How to let users change linux password from web browser?

    - by wag2639
    I'm not sure if this is a stackoverflow question or serverfault but here goes: I have an Ubuntu 10.04 file server (Samba/FTP/HTTP) and I would like to have the ability to give users the ability to change their password to the server using their web browser. I've written a similar script before using PHP and a mess of exec but I believe that isn't secure because it can be listened to by someone looking at the list of processes on the server. Is there some kind of plugin (PHP or Python or other) that can do this easily? I rather not use something like webmin as it's overkill for this.

    Read the article

  • How do I create a free server-side database to be accessed via Windows forms and/or browser?

    - by NoCatharsis
    I have no formal education in databasing or programming, but I've learned enough SQL, C++, and C# to at least get started setting up a small database on my company's server. Using MS SQL Server 2008 R2, I have created the database and set up columns with proper data types. However, there seems to be a lot of tweaks and details that are way over my head. Since I would like these data to be accessible to the other 7 or 8 people in my office (preferably via web browser), I'm wondering whether this is the best setup for my situation. The other option I've read about is a LAMPP server, which I assume is the competing free option to Microsoft's Express packages. I know nothing of LAMP servers except from the articles I've read on how to set them up (and I believe I even saw a detailed tutorial somewhere). To summarize, my question is this: Which of these (or any other) server setups would best suit my purposes, keeping in mind that I'm a true novice (but willing to learn), and would like to keep it free until I get more experience?

    Read the article

  • Installed IE8 & SP3 on XP now I can't HTTPS from any browser.

    - by Kevin
    The computer is Windows XP Professional SP3 with IE8. On the Tools Options Connections the "Settings" is GRAYED OUT (I am an admin on the machine) Any browsing of https:// addresses results in IE displaying the following: "this program cannot display the web page" After installing an alternate browser and trying the same https:// address I get a similar error message. I have tried using Compatibility View Settings to for all web pages and this has no effect on the problem. HTTP addresses work fine, I can PING sites such as google.com without issue. Question: What could be preventing me from getting at the settings to check to see if I'm using a proxy? What else could be preventing HTTPS access?

    Read the article

  • How is a Chromebook better than using Chrome browser on another OS?

    - by bigpopakap
    I'm looking into getting a Chromebook as a lightweight device to use for basic functions. I'm fully aware of some of the limitations like no native apps, limited functionality while offline (though this is getting better with Google Drive's offline capabilities). Currently, I have a Windows machine on which I've installed Google Drive, so files in that folder are synced. And I use Chrome as my browser. So I have access to all the same apps (Drive, Calendar, Gmail, Google Music, etc.). Is there any advantage to having a Chromebook over my current setup, other than the speed of the lightweight Chrome OS?

    Read the article

  • How to create a hotkey to open diigo in Chrome browser?

    - by Nam Gi VU
    I'm using diigo extension in Chrome browser and feel quite tired of clicking the diigo icon every time I want to bookmark. I'm looking for a way to have a hotkey for it but can't find it in the option of diigo. I tried solution suggested by makeuseof website but the diigo booklet doesn't work as great as the extension - it requires to sign in again and again... !? If you have any work-around to get the hotkey for diigo, please share! Thank you!

    Read the article

  • Ubuntu: On a network with many clients there are two machines that can't access the web via a browser at the same time

    - by ChrisInCambo
    Ok I'm pulling my hair out over this one. We have a wireless network with many clients all working well except two Ubuntu clients running 10.10 that can't access the internet via a browser at the same time. They can both still ping, use Skype etc but can't browse. As soon as the one that can browse exits the network browsing returns for the other and vice versa. As ping and Skype was working I assumed some kind of DNS problem but moving over to OpenDNS didn't solve it, nor did restarting networking or using wired rather than wireless. We also switched out the router, and it still persisted so I'm sure this isn't a network issue. The two clients are both laptops and work fine together on a wireless network at another office (which we don't control). I'm thinking something must be cached from the other network they both use that's causing this but have no idea what. Does anyone have any ideas? I just don't know where to go from here.

    Read the article

  • Why does the Mobile Safari Browser on iOS not allow file uploads? [migrated]

    - by Kirinriki
    As already known, it's not possible for iOS users to select image files to upload from Safari on iPhone, because the browse button to display the "select file"- dialog is disabled. It works fine on Android, but not on iPhone... What is the particular reason for that issue? I heard that the browse button is disabled because there isn't a file browser on the iPhone. Someone other said that Safari just disabled root access. Is there any reliable source which explains the issue? (I need it for my thesis.)

    Read the article

  • How to Disable Hovering Selection Block in File Browser?

    - by BGM
    I am changing from Windows XP to Windows 7. One thing I cannot stand about Windows 7 is that whenever you mouse over files in Explorer (or other file-browser), it highlights the files with a semi-transparent block. This is nice, but I want to be able to double-click on the white area background of the directory, and I can't do this with the highlighted selection always there. The hovering-block is always in the way of the background - especially if there are a lot of files in the directory. (I don't even know what that hovering-block is called; if someone enlightens me, I'll re-title my post) Is there any way to get the file selector to work like XP?

    Read the article

  • FeedDaemon and Tweetdeck not opening links in Chrome but opening in IE when IE is set default browser

    - by user2059078
    A while ago a Chrome version update failed and I ended up having a program called new_chrome.exe in the folder where chrome.exe used to be. I was very busy at that moment and I continued to work without bothering to try to fix the problem. Apparently recently another update came out and the new_chrome.exe is now gone, it was replaced by chrome.exe. Since the last upgrade happened two applications that I use a lot (not sure if others do the same) do now work anymore as they used to when I try to open links. These two apps are Tweetdek and Feedaemon. If I change the default browser to Internet Explorer they both open the links when I click on them I tried everything I could but it did not work: My Default programs look like this: and my set Default Programs looks like this: How can I fix this?

    Read the article

  • Can't connect to localhost via browser. Can ping localhost.

    - by Sceptre
    I'm trying to connect to localhost through my browser to learn some apache tomcat stuff. When I tried to connect to localhost through Firefox, I couldn't; when I tried through IE, I could the first time, but not after that. I'm using Windows 7, and changed the hosts file to point localhost to 127.0.0.1. I can successfully ping localhost and 127.0.0.1. I have tried turning off my antivirus and my Windows Firewall, but to no avail. What am I doing wrong?

    Read the article

  • Cannot access https sites through any browser on Win XP?

    - by mooep
    This isnt a firewall issue, I can telnet to gmail with no problems, but all browsers (chrome, IE, firefox) return a This web page is not available. error when tring to access it through the browser. I can access the same pages, using the same browsers, on the same machine, but through a different user account with no problem. What the hell is going on? Help appreciated. Edit: This is definitely a windows setup issue - I have just created a new admin account and can access https with problems. This is seriously infuriating.

    Read the article

  • websites resolving in browser but not resolving in CLI. Can ping IP but not domain name (unknown host)

    - by tjkoding
    Hi guys I'm currently developing using rails and for some reason bundle install is returning the following output Error Bundler::HTTPError during request to dependency API Fetching full source index from https://rubygems.org/ Could not reach https://rubygems.org/ I've discovered that pinging by domain name keeps returning an unknown host. The browser is still resolving web pages just fine and I've managed to confirm that the problem is localized (i.e. the rubygems page isn't down). I'm completely lost so any help would be much appreciated. Thanks in advance!

    Read the article

  • Improving Partitioned Table Join Performance

    - by Paul White
    The query optimizer does not always choose an optimal strategy when joining partitioned tables. This post looks at an example, showing how a manual rewrite of the query can almost double performance, while reducing the memory grant to almost nothing. Test Data The two tables in this example use a common partitioning partition scheme. The partition function uses 41 equal-size partitions: CREATE PARTITION FUNCTION PFT (integer) AS RANGE RIGHT FOR VALUES ( 125000, 250000, 375000, 500000, 625000, 750000, 875000, 1000000, 1125000, 1250000, 1375000, 1500000, 1625000, 1750000, 1875000, 2000000, 2125000, 2250000, 2375000, 2500000, 2625000, 2750000, 2875000, 3000000, 3125000, 3250000, 3375000, 3500000, 3625000, 3750000, 3875000, 4000000, 4125000, 4250000, 4375000, 4500000, 4625000, 4750000, 4875000, 5000000 ); GO CREATE PARTITION SCHEME PST AS PARTITION PFT ALL TO ([PRIMARY]); There two tables are: CREATE TABLE dbo.T1 ( TID integer NOT NULL IDENTITY(0,1), Column1 integer NOT NULL, Padding binary(100) NOT NULL DEFAULT 0x,   CONSTRAINT PK_T1 PRIMARY KEY CLUSTERED (TID) ON PST (TID) );   CREATE TABLE dbo.T2 ( TID integer NOT NULL, Column1 integer NOT NULL, Padding binary(100) NOT NULL DEFAULT 0x,   CONSTRAINT PK_T2 PRIMARY KEY CLUSTERED (TID, Column1) ON PST (TID) ); The next script loads 5 million rows into T1 with a pseudo-random value between 1 and 5 for Column1. The table is partitioned on the IDENTITY column TID: INSERT dbo.T1 WITH (TABLOCKX) (Column1) SELECT (ABS(CHECKSUM(NEWID())) % 5) + 1 FROM dbo.Numbers AS N WHERE n BETWEEN 1 AND 5000000; In case you don’t already have an auxiliary table of numbers lying around, here’s a script to create one with 10 million rows: CREATE TABLE dbo.Numbers (n bigint PRIMARY KEY);   WITH L0 AS(SELECT 1 AS c UNION ALL SELECT 1), L1 AS(SELECT 1 AS c FROM L0 AS A CROSS JOIN L0 AS B), L2 AS(SELECT 1 AS c FROM L1 AS A CROSS JOIN L1 AS B), L3 AS(SELECT 1 AS c FROM L2 AS A CROSS JOIN L2 AS B), L4 AS(SELECT 1 AS c FROM L3 AS A CROSS JOIN L3 AS B), L5 AS(SELECT 1 AS c FROM L4 AS A CROSS JOIN L4 AS B), Nums AS(SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS n FROM L5) INSERT dbo.Numbers WITH (TABLOCKX) SELECT TOP (10000000) n FROM Nums ORDER BY n OPTION (MAXDOP 1); Table T1 contains data like this: Next we load data into table T2. The relationship between the two tables is that table 2 contains ‘n’ rows for each row in table 1, where ‘n’ is determined by the value in Column1 of table T1. There is nothing particularly special about the data or distribution, by the way. INSERT dbo.T2 WITH (TABLOCKX) (TID, Column1) SELECT T.TID, N.n FROM dbo.T1 AS T JOIN dbo.Numbers AS N ON N.n >= 1 AND N.n <= T.Column1; Table T2 ends up containing about 15 million rows: The primary key for table T2 is a combination of TID and Column1. The data is partitioned according to the value in column TID alone. Partition Distribution The following query shows the number of rows in each partition of table T1: SELECT PartitionID = CA1.P, NumRows = COUNT_BIG(*) FROM dbo.T1 AS T CROSS APPLY (VALUES ($PARTITION.PFT(TID))) AS CA1 (P) GROUP BY CA1.P ORDER BY CA1.P; There are 40 partitions containing 125,000 rows (40 * 125k = 5m rows). The rightmost partition remains empty. The next query shows the distribution for table 2: SELECT PartitionID = CA1.P, NumRows = COUNT_BIG(*) FROM dbo.T2 AS T CROSS APPLY (VALUES ($PARTITION.PFT(TID))) AS CA1 (P) GROUP BY CA1.P ORDER BY CA1.P; There are roughly 375,000 rows in each partition (the rightmost partition is also empty): Ok, that’s the test data done. Test Query and Execution Plan The task is to count the rows resulting from joining tables 1 and 2 on the TID column: SET STATISTICS IO ON; DECLARE @s datetime2 = SYSUTCDATETIME();   SELECT COUNT_BIG(*) FROM dbo.T1 AS T1 JOIN dbo.T2 AS T2 ON T2.TID = T1.TID;   SELECT DATEDIFF(Millisecond, @s, SYSUTCDATETIME()); SET STATISTICS IO OFF; The optimizer chooses a plan using parallel hash join, and partial aggregation: The Plan Explorer plan tree view shows accurate cardinality estimates and an even distribution of rows across threads (click to enlarge the image): With a warm data cache, the STATISTICS IO output shows that no physical I/O was needed, and all 41 partitions were touched: Running the query without actual execution plan or STATISTICS IO information for maximum performance, the query returns in around 2600ms. Execution Plan Analysis The first step toward improving on the execution plan produced by the query optimizer is to understand how it works, at least in outline. The two parallel Clustered Index Scans use multiple threads to read rows from tables T1 and T2. Parallel scan uses a demand-based scheme where threads are given page(s) to scan from the table as needed. This arrangement has certain important advantages, but does result in an unpredictable distribution of rows amongst threads. The point is that multiple threads cooperate to scan the whole table, but it is impossible to predict which rows end up on which threads. For correct results from the parallel hash join, the execution plan has to ensure that rows from T1 and T2 that might join are processed on the same thread. For example, if a row from T1 with join key value ‘1234’ is placed in thread 5’s hash table, the execution plan must guarantee that any rows from T2 that also have join key value ‘1234’ probe thread 5’s hash table for matches. The way this guarantee is enforced in this parallel hash join plan is by repartitioning rows to threads after each parallel scan. The two repartitioning exchanges route rows to threads using a hash function over the hash join keys. The two repartitioning exchanges use the same hash function so rows from T1 and T2 with the same join key must end up on the same hash join thread. Expensive Exchanges This business of repartitioning rows between threads can be very expensive, especially if a large number of rows is involved. The execution plan selected by the optimizer moves 5 million rows through one repartitioning exchange and around 15 million across the other. As a first step toward removing these exchanges, consider the execution plan selected by the optimizer if we join just one partition from each table, disallowing parallelism: SELECT COUNT_BIG(*) FROM dbo.T1 AS T1 JOIN dbo.T2 AS T2 ON T2.TID = T1.TID WHERE $PARTITION.PFT(T1.TID) = 1 AND $PARTITION.PFT(T2.TID) = 1 OPTION (MAXDOP 1); The optimizer has chosen a (one-to-many) merge join instead of a hash join. The single-partition query completes in around 100ms. If everything scaled linearly, we would expect that extending this strategy to all 40 populated partitions would result in an execution time around 4000ms. Using parallelism could reduce that further, perhaps to be competitive with the parallel hash join chosen by the optimizer. This raises a question. If the most efficient way to join one partition from each of the tables is to use a merge join, why does the optimizer not choose a merge join for the full query? Forcing a Merge Join Let’s force the optimizer to use a merge join on the test query using a hint: SELECT COUNT_BIG(*) FROM dbo.T1 AS T1 JOIN dbo.T2 AS T2 ON T2.TID = T1.TID OPTION (MERGE JOIN); This is the execution plan selected by the optimizer: This plan results in the same number of logical reads reported previously, but instead of 2600ms the query takes 5000ms. The natural explanation for this drop in performance is that the merge join plan is only using a single thread, whereas the parallel hash join plan could use multiple threads. Parallel Merge Join We can get a parallel merge join plan using the same query hint as before, and adding trace flag 8649: SELECT COUNT_BIG(*) FROM dbo.T1 AS T1 JOIN dbo.T2 AS T2 ON T2.TID = T1.TID OPTION (MERGE JOIN, QUERYTRACEON 8649); The execution plan is: This looks promising. It uses a similar strategy to distribute work across threads as seen for the parallel hash join. In practice though, performance is disappointing. On a typical run, the parallel merge plan runs for around 8400ms; slower than the single-threaded merge join plan (5000ms) and much worse than the 2600ms for the parallel hash join. We seem to be going backwards! The logical reads for the parallel merge are still exactly the same as before, with no physical IOs. The cardinality estimates and thread distribution are also still very good (click to enlarge): A big clue to the reason for the poor performance is shown in the wait statistics (captured by Plan Explorer Pro): CXPACKET waits require careful interpretation, and are most often benign, but in this case excessive waiting occurs at the repartitioning exchanges. Unlike the parallel hash join, the repartitioning exchanges in this plan are order-preserving ‘merging’ exchanges (because merge join requires ordered inputs): Parallelism works best when threads can just grab any available unit of work and get on with processing it. Preserving order introduces inter-thread dependencies that can easily lead to significant waits occurring. In extreme cases, these dependencies can result in an intra-query deadlock, though the details of that will have to wait for another time to explore in detail. The potential for waits and deadlocks leads the query optimizer to cost parallel merge join relatively highly, especially as the degree of parallelism (DOP) increases. This high costing resulted in the optimizer choosing a serial merge join rather than parallel in this case. The test results certainly confirm its reasoning. Collocated Joins In SQL Server 2008 and later, the optimizer has another available strategy when joining tables that share a common partition scheme. This strategy is a collocated join, also known as as a per-partition join. It can be applied in both serial and parallel execution plans, though it is limited to 2-way joins in the current optimizer. Whether the optimizer chooses a collocated join or not depends on cost estimation. The primary benefits of a collocated join are that it eliminates an exchange and requires less memory, as we will see next. Costing and Plan Selection The query optimizer did consider a collocated join for our original query, but it was rejected on cost grounds. The parallel hash join with repartitioning exchanges appeared to be a cheaper option. There is no query hint to force a collocated join, so we have to mess with the costing framework to produce one for our test query. Pretending that IOs cost 50 times more than usual is enough to convince the optimizer to use collocated join with our test query: -- Pretend IOs are 50x cost temporarily DBCC SETIOWEIGHT(50);   -- Co-located hash join SELECT COUNT_BIG(*) FROM dbo.T1 AS T1 JOIN dbo.T2 AS T2 ON T2.TID = T1.TID OPTION (RECOMPILE);   -- Reset IO costing DBCC SETIOWEIGHT(1); Collocated Join Plan The estimated execution plan for the collocated join is: The Constant Scan contains one row for each partition of the shared partitioning scheme, from 1 to 41. The hash repartitioning exchanges seen previously are replaced by a single Distribute Streams exchange using Demand partitioning. Demand partitioning means that the next partition id is given to the next parallel thread that asks for one. My test machine has eight logical processors, and all are available for SQL Server to use. As a result, there are eight threads in the single parallel branch in this plan, each processing one partition from each table at a time. Once a thread finishes processing a partition, it grabs a new partition number from the Distribute Streams exchange…and so on until all partitions have been processed. It is important to understand that the parallel scans in this plan are different from the parallel hash join plan. Although the scans have the same parallelism icon, tables T1 and T2 are not being co-operatively scanned by multiple threads in the same way. Each thread reads a single partition of T1 and performs a hash match join with the same partition from table T2. The properties of the two Clustered Index Scans show a Seek Predicate (unusual for a scan!) limiting the rows to a single partition: The crucial point is that the join between T1 and T2 is on TID, and TID is the partitioning column for both tables. A thread that processes partition ‘n’ is guaranteed to see all rows that can possibly join on TID for that partition. In addition, no other thread will see rows from that partition, so this removes the need for repartitioning exchanges. CPU and Memory Efficiency Improvements The collocated join has removed two expensive repartitioning exchanges and added a single exchange processing 41 rows (one for each partition id). Remember, the parallel hash join plan exchanges had to process 5 million and 15 million rows. The amount of processor time spent on exchanges will be much lower in the collocated join plan. In addition, the collocated join plan has a maximum of 8 threads processing single partitions at any one time. The 41 partitions will all be processed eventually, but a new partition is not started until a thread asks for it. Threads can reuse hash table memory for the new partition. The parallel hash join plan also had 8 hash tables, but with all 5,000,000 build rows loaded at the same time. The collocated plan needs memory for only 8 * 125,000 = 1,000,000 rows at any one time. Collocated Hash Join Performance The collated join plan has disappointing performance in this case. The query runs for around 25,300ms despite the same IO statistics as usual. This is much the worst result so far, so what went wrong? It turns out that cardinality estimation for the single partition scans of table T1 is slightly low. The properties of the Clustered Index Scan of T1 (graphic immediately above) show the estimation was for 121,951 rows. This is a small shortfall compared with the 125,000 rows actually encountered, but it was enough to cause the hash join to spill to physical tempdb: A level 1 spill doesn’t sound too bad, until you realize that the spill to tempdb probably occurs for each of the 41 partitions. As a side note, the cardinality estimation error is a little surprising because the system tables accurately show there are 125,000 rows in every partition of T1. Unfortunately, the optimizer uses regular column and index statistics to derive cardinality estimates here rather than system table information (e.g. sys.partitions). Collocated Merge Join We will never know how well the collocated parallel hash join plan might have worked without the cardinality estimation error (and the resulting 41 spills to tempdb) but we do know: Merge join does not require a memory grant; and Merge join was the optimizer’s preferred join option for a single partition join Putting this all together, what we would really like to see is the same collocated join strategy, but using merge join instead of hash join. Unfortunately, the current query optimizer cannot produce a collocated merge join; it only knows how to do collocated hash join. So where does this leave us? CROSS APPLY sys.partitions We can try to write our own collocated join query. We can use sys.partitions to find the partition numbers, and CROSS APPLY to get a count per partition, with a final step to sum the partial counts. The following query implements this idea: SELECT row_count = SUM(Subtotals.cnt) FROM ( -- Partition numbers SELECT p.partition_number FROM sys.partitions AS p WHERE p.[object_id] = OBJECT_ID(N'T1', N'U') AND p.index_id = 1 ) AS P CROSS APPLY ( -- Count per collocated join SELECT cnt = COUNT_BIG(*) FROM dbo.T1 AS T1 JOIN dbo.T2 AS T2 ON T2.TID = T1.TID WHERE $PARTITION.PFT(T1.TID) = p.partition_number AND $PARTITION.PFT(T2.TID) = p.partition_number ) AS SubTotals; The estimated plan is: The cardinality estimates aren’t all that good here, especially the estimate for the scan of the system table underlying the sys.partitions view. Nevertheless, the plan shape is heading toward where we would like to be. Each partition number from the system table results in a per-partition scan of T1 and T2, a one-to-many Merge Join, and a Stream Aggregate to compute the partial counts. The final Stream Aggregate just sums the partial counts. Execution time for this query is around 3,500ms, with the same IO statistics as always. This compares favourably with 5,000ms for the serial plan produced by the optimizer with the OPTION (MERGE JOIN) hint. This is another case of the sum of the parts being less than the whole – summing 41 partial counts from 41 single-partition merge joins is faster than a single merge join and count over all partitions. Even so, this single-threaded collocated merge join is not as quick as the original parallel hash join plan, which executed in 2,600ms. On the positive side, our collocated merge join uses only one logical processor and requires no memory grant. The parallel hash join plan used 16 threads and reserved 569 MB of memory:   Using a Temporary Table Our collocated merge join plan should benefit from parallelism. The reason parallelism is not being used is that the query references a system table. We can work around that by writing the partition numbers to a temporary table (or table variable): SET STATISTICS IO ON; DECLARE @s datetime2 = SYSUTCDATETIME();   CREATE TABLE #P ( partition_number integer PRIMARY KEY);   INSERT #P (partition_number) SELECT p.partition_number FROM sys.partitions AS p WHERE p.[object_id] = OBJECT_ID(N'T1', N'U') AND p.index_id = 1;   SELECT row_count = SUM(Subtotals.cnt) FROM #P AS p CROSS APPLY ( SELECT cnt = COUNT_BIG(*) FROM dbo.T1 AS T1 JOIN dbo.T2 AS T2 ON T2.TID = T1.TID WHERE $PARTITION.PFT(T1.TID) = p.partition_number AND $PARTITION.PFT(T2.TID) = p.partition_number ) AS SubTotals;   DROP TABLE #P;   SELECT DATEDIFF(Millisecond, @s, SYSUTCDATETIME()); SET STATISTICS IO OFF; Using the temporary table adds a few logical reads, but the overall execution time is still around 3500ms, indistinguishable from the same query without the temporary table. The problem is that the query optimizer still doesn’t choose a parallel plan for this query, though the removal of the system table reference means that it could if it chose to: In fact the optimizer did enter the parallel plan phase of query optimization (running search 1 for a second time): Unfortunately, the parallel plan found seemed to be more expensive than the serial plan. This is a crazy result, caused by the optimizer’s cost model not reducing operator CPU costs on the inner side of a nested loops join. Don’t get me started on that, we’ll be here all night. In this plan, everything expensive happens on the inner side of a nested loops join. Without a CPU cost reduction to compensate for the added cost of exchange operators, candidate parallel plans always look more expensive to the optimizer than the equivalent serial plan. Parallel Collocated Merge Join We can produce the desired parallel plan using trace flag 8649 again: SELECT row_count = SUM(Subtotals.cnt) FROM #P AS p CROSS APPLY ( SELECT cnt = COUNT_BIG(*) FROM dbo.T1 AS T1 JOIN dbo.T2 AS T2 ON T2.TID = T1.TID WHERE $PARTITION.PFT(T1.TID) = p.partition_number AND $PARTITION.PFT(T2.TID) = p.partition_number ) AS SubTotals OPTION (QUERYTRACEON 8649); The actual execution plan is: One difference between this plan and the collocated hash join plan is that a Repartition Streams exchange operator is used instead of Distribute Streams. The effect is similar, though not quite identical. The Repartition uses round-robin partitioning, meaning the next partition id is pushed to the next thread in sequence. The Distribute Streams exchange seen earlier used Demand partitioning, meaning the next partition id is pulled across the exchange by the next thread that is ready for more work. There are subtle performance implications for each partitioning option, but going into that would again take us too far off the main point of this post. Performance The important thing is the performance of this parallel collocated merge join – just 1350ms on a typical run. The list below shows all the alternatives from this post (all timings include creation, population, and deletion of the temporary table where appropriate) from quickest to slowest: Collocated parallel merge join: 1350ms Parallel hash join: 2600ms Collocated serial merge join: 3500ms Serial merge join: 5000ms Parallel merge join: 8400ms Collated parallel hash join: 25,300ms (hash spill per partition) The parallel collocated merge join requires no memory grant (aside from a paltry 1.2MB used for exchange buffers). This plan uses 16 threads at DOP 8; but 8 of those are (rather pointlessly) allocated to the parallel scan of the temporary table. These are minor concerns, but it turns out there is a way to address them if it bothers you. Parallel Collocated Merge Join with Demand Partitioning This final tweak replaces the temporary table with a hard-coded list of partition ids (dynamic SQL could be used to generate this query from sys.partitions): SELECT row_count = SUM(Subtotals.cnt) FROM ( VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10), (11),(12),(13),(14),(15),(16),(17),(18),(19),(20), (21),(22),(23),(24),(25),(26),(27),(28),(29),(30), (31),(32),(33),(34),(35),(36),(37),(38),(39),(40),(41) ) AS P (partition_number) CROSS APPLY ( SELECT cnt = COUNT_BIG(*) FROM dbo.T1 AS T1 JOIN dbo.T2 AS T2 ON T2.TID = T1.TID WHERE $PARTITION.PFT(T1.TID) = p.partition_number AND $PARTITION.PFT(T2.TID) = p.partition_number ) AS SubTotals OPTION (QUERYTRACEON 8649); The actual execution plan is: The parallel collocated hash join plan is reproduced below for comparison: The manual rewrite has another advantage that has not been mentioned so far: the partial counts (per partition) can be computed earlier than the partial counts (per thread) in the optimizer’s collocated join plan. The earlier aggregation is performed by the extra Stream Aggregate under the nested loops join. The performance of the parallel collocated merge join is unchanged at around 1350ms. Final Words It is a shame that the current query optimizer does not consider a collocated merge join (Connect item closed as Won’t Fix). The example used in this post showed an improvement in execution time from 2600ms to 1350ms using a modestly-sized data set and limited parallelism. In addition, the memory requirement for the query was almost completely eliminated  – down from 569MB to 1.2MB. The problem with the parallel hash join selected by the optimizer is that it attempts to process the full data set all at once (albeit using eight threads). It requires a large memory grant to hold all 5 million rows from table T1 across the eight hash tables, and does not take advantage of the divide-and-conquer opportunity offered by the common partitioning. The great thing about the collocated join strategies is that each parallel thread works on a single partition from both tables, reading rows, performing the join, and computing a per-partition subtotal, before moving on to a new partition. From a thread’s point of view… If you have trouble visualizing what is happening from just looking at the parallel collocated merge join execution plan, let’s look at it again, but from the point of view of just one thread operating between the two Parallelism (exchange) operators. Our thread picks up a single partition id from the Distribute Streams exchange, and starts a merge join using ordered rows from partition 1 of table T1 and partition 1 of table T2. By definition, this is all happening on a single thread. As rows join, they are added to a (per-partition) count in the Stream Aggregate immediately above the Merge Join. Eventually, either T1 (partition 1) or T2 (partition 1) runs out of rows and the merge join stops. The per-partition count from the aggregate passes on through the Nested Loops join to another Stream Aggregate, which is maintaining a per-thread subtotal. Our same thread now picks up a new partition id from the exchange (say it gets id 9 this time). The count in the per-partition aggregate is reset to zero, and the processing of partition 9 of both tables proceeds just as it did for partition 1, and on the same thread. Each thread picks up a single partition id and processes all the data for that partition, completely independently from other threads working on other partitions. One thread might eventually process partitions (1, 9, 17, 25, 33, 41) while another is concurrently processing partitions (2, 10, 18, 26, 34) and so on for the other six threads at DOP 8. The point is that all 8 threads can execute independently and concurrently, continuing to process new partitions until the wider job (of which the thread has no knowledge!) is done. This divide-and-conquer technique can be much more efficient than simply splitting the entire workload across eight threads all at once. Related Reading Understanding and Using Parallelism in SQL Server Parallel Execution Plans Suck © 2013 Paul White – All Rights Reserved Twitter: @SQL_Kiwi

    Read the article

  • Redirect from URL with QueryString to the same URL without QueryString

    - by Slauma
    I have a page request with a QueryString, say http://www.xyz.net/Orders.aspx?OrderID=1. The page is displayed in a browser. Now there is an asp:LinkButton on the page which should enable the user to open the page without the QueryString (as if he had entered http://www.xyz.net/Orders.aspx directly in the browser's address bar). I had two ideas: 1) Use the PostBackUrl attribute of the LinkButton: <asp:LinkButton ID="LinkButton1" runat="server" Text="Select" PostBackUrl="~/Orders.aspx" /> 2) Use "RedirectUrl" in an event handler: <asp:LinkButton ID="LinkButton1" runat="server" Text="Select" OnClick="LinkButton1_Click" /> ...and... protected void LinkButton1_Click(object sender, EventArgs e) { Response.Redirect("~/Orders.aspx"); } In both cases the browser's address bar shows http://www.xyz.net/Orders.aspx without the QueryString, as I like to have it. But in the first case the page does not change at all. But it should, because I'm evaluating the QueryString in code-behind and control the appearance of the page depending on whether a QueryString exists or not. The second option works as intended. If I am not wrong the second option requires an additional roundtrip: Browser sends request to server Event handler on server side sends Redirect URL to browser Browser sends again request to the server, but with the new URL Server sends new requested page to browser Is this correct at all? Whereas the first option omits the first two steps in the list above, thus saving the additional roundtrip and resulting in: Browser sends request to the server, but with the new URL (the PostbackURL specified in the LinkButton) Server sends new requested page to browser But, as said, the result isn't the same. I'm sure my try to explain the differences between the two options is wrong somewhere. But I don't know where exactly. Can someone explain what's really the difference? Do I really need this second roundtrip of option (2) to achieve what I want? Thanks in advance!

    Read the article

  • flash video appears blue ubuntu 12.04

    - by pst007x
    This is a duplicate, however the solution given does not work. After updating to Ubuntu 12.04 from Ubuntu 11.10, all video is now blue, whether playing in a browser or a player. I have tried to uninstall all Flash and re-installed but makes no difference. Does anyone have any ideas? Fix (work around) Issue: All web browsers flash player video is blue Chromium Google Chrome Firefox Both flash plugins causes flash video to appear have a blue overlay, so remove. Adobe - flashplugin Flashplugin - installer Solution (not as functional as adobe flash plug in but it works) Install Lightspark (plus any browser-plugins) or Install Gnash (plus any browser-plugins) FIX (Possible) Removed: Gnash-browser plugins Video Decode and Presentation API for Unix (libraries) libvdpau1 Installed: Adobe-flashplugin Re-started browser, and it worked for me.

    Read the article

  • How to find the list of all available packages along with the lastest version number available in the repositories?

    - by Avinash Raj
    I want to list all the packages(installed or not installed) along with the latest version number available in the repositories. For example: The output of apt-cache policy chromium-browser shows like below $ apt-cache policy chromium-browser chromium-browser: Installed: (none) Candidate: 34.0.1847.116-0ubuntu2 Version table: 34.0.1847.116-0ubuntu2 0 500 http://ftp.cuhk.edu.hk/pub/Linux/ubuntu/ trusty/universe amd64 Packages So the latest version of chromium-browser package available in the repository is 34.0.1847.116-0ubuntu2. Like that, i want to list the version number along with the package names that are available in repositories. And all i want to do this through command-line. I want the output to be like this, chromium-browser 34.0.1847.116-0ubuntu2 xxxxxxxxxxxxxx yyyyyyyyyyy ............ ............

    Read the article

  • Are IE9 really good ?

    - by anirudha
    IE9 started a campaign for kill IE6 from the core because they know that IE6 is a big trouble or  problem for them for promote 9 version of IE. so they started a campaign for killing IE6. next time they kill IE 7 , 8,9 whenever they found this old version have a big problem for them to promote next version of IE.   Why they not make a update system who automatically update the browser and tell user to restart and update goes installed in the user system. well IE9 should learn from all other that they have very well design auto-update system who never give user in trouble that your browser goes old. Chrome and Firefox both update themselves and say user restart to enjoy another good version. in IE6 a big problem is that updates. no one sure that they installed new version of IE6 without any hassles and update goes install without any problem because they really know or care about “you need this to install this and this for this” so they thing “why I update IE whenever I am unsure that my browser goes update and I have no problem again” so they do nothing because their work done with no problem because common person used high profile application who work even in IE6. so they do nothing.    IE6 countdown website have designed a banner for warn or force user to upgrade to next version of IE. well there is no good reason for put the banner on website some of reason are:-   Windows 7 comes with pre-installed IE8 and Vista comes with upgrade version them IE6 so that is sure that you force a user who have Windows XP [luna] and if they want to upgrade IE then they can get IE8 not version 9 because IE9 is design for Windows 7 or Vista Service pack 2. so What is the use of update when user still have a outdate version too because IE8 is old version and not have any capability of HTML5 so forcing user by using the banner have no sense. I am not know why they all listed on website put the banner on their own website. it’s good that you offer user what they want instead of giving them a outdate version of IE again. My means to give a user list of browser they can try to enhance their browser experience instead of only IE.   IE9 build upon WPF and they spent more time on using WPF in IE instead of making user experience browser.  many thing is designed wrongly in IE first thing is tabs. the tabs in chrome are bigger and easily to move and same in Firefox even not have smooth tabbing. IE have same tabbing as chrome have but leak a point that it’s too small. if you really  want to move then sometime they create a problem that they going elsewhere from the current instance of IE.   Chrome have a big buttons, tabs and menu to enhance browser experience and Firefox have a good feature that you can make them bigger or small. you can put the icon for add-ons on the toolbar for easily use but IE have no relation with customization so we never can thinking about that.   When chrome provide lot’s of extensions and a  webstore for browser application and same feature in Firefox can be seen then there is no plugin in IE. really you can see their IE addons Website where no plugin listed for web development. even in the category or tag. as a response from many blog there is new for developer that new version of IE9 developer tool. well IE9 have three new tabs a blogger tell on their blog. when I trying them I found many thing but I still unable to edit the Css from the HTML tab and no plugin I found I can get to enhance IE9 web development. something more other provide never IE9 give me like personas , customization , browser extension or any other they used to tell a small thing customization  .   IE9 still have some problem with JavaScript that when I use Firefox and chrome and logout in both then my cookie is deleted but in IE it’s not done. it’s show me that IE9 still have different from other not for good thing even some bad thing too. When I trying to read a article that is written in Hindi using Unicode font I found that they show many thing misspelled. there is three Sha in Hindi but they all goes wrong in IE. the misprint thing is not that the writing  for the articles goes wrong. it’s problem or browser to rendering a font. the Firefox and chrome not give me this problem even opera render the font in italic style by decrease the font-size but all those work perfect.   in Pwn2Own the apple’s safari  and IE9 both are hacked. this is a awesome news for whose who thing that  open-source is lose in  Security and close-source is highly-secured software. well this is not a good parameter for talking about software. it’s should depend how much application tested and used. because more testing and more use of application make them better.   I  appreciate IE to making their new version 9 and good luck for them. there is a another matter that I personally found nothing on them.

    Read the article

< Previous Page | 141 142 143 144 145 146 147 148 149 150 151 152  | Next Page >