Snitz Forums 2000
Snitz Forums 2000
Home | Profile | Register | Active Topics | Members | Search | FAQ
Username:
Password:
Save Password
Forgot your Password?

 All Forums
 Snitz Forums 2000 MOD-Group
 MOD Add-On Forum (W/Code)
 Database calls in Active.asp
 New Topic  Topic Locked
 Printer Friendly
Next Page
Author Previous Topic Topic Next Topic
Page: of 6

grazman
Junior Member

USA
193 Posts

Posted - 23 March 2002 :  17:41:09  Show Profile  Visit grazman's Homepage
I was looking through the database calls in active.asp and here's what I found:

SELECT 	FORUM_MEMBERS.MEMBER_ID, FORUM_MEMBERS.M_LEVEL, FORUM_MEMBERS.M_NAME, FORUM_MEMBERS.M_PASSWORD  
FROM FORUM_MEMBERS
WHERE FORUM_MEMBERS.M_NAME = 'graz' AND FORUM_MEMBERS.M_PASSWORD = 'password' AND FORUM_MEMBERS.M_STATUS = 1

SELECT FORUM_MEMBERS.MEMBER_ID FROM FORUM_MEMBERS WHERE M_NAME = 'graz'

SELECT COUNT(*) AS SubCount FROM FORUM_SUBSCRIPTIONS

SELECT FORUM_MEMBERS.MEMBER_ID, FORUM_MEMBERS.M_LEVEL, FORUM_MEMBERS.M_NAME, FORUM_MEMBERS.M_PASSWORD
FROM FORUM_MEMBERS
WHERE FORUM_MEMBERS.M_NAME = 'graz' AND FORUM_MEMBERS.M_PASSWORD = 'password' AND FORUM_MEMBERS.M_STATUS = 1

-- main query for topics
SELECT F.F_SUBJECT, F.F_SUBSCRIPTION, F.F_STATUS, F.F_ORDER, C.CAT_SUBSCRIPTION, C.CAT_STATUS, C.CAT_ORDER,
T.T_STATUS, T.T_VIEW_COUNT, T.FORUM_ID, T.TOPIC_ID, T.CAT_ID, T.T_SUBJECT, T.T_AUTHOR, T.T_REPLIES,
M.M_NAME, T.T_LAST_POST_AUTHOR, T.T_LAST_POST, MEMBERS_1.M_NAME AS LAST_POST_AUTHOR_NAME
FROM FORUM_MEMBERS M, FORUM_FORUM F, FORUM_TOPICS T, FORUM_CATEGORY C, FORUM_MEMBERS MEMBERS_1
WHERE T.T_LAST_POST_AUTHOR = MEMBERS_1.MEMBER_ID AND F.FORUM_ID = T.FORUM_ID AND F.CAT_ID = T.CAT_ID
AND F.CAT_ID = C.CAT_ID AND M.MEMBER_ID = T.T_AUTHOR AND (T.T_LAST_POST > '20020316160614')
ORDER BY C.CAT_ORDER, F.F_ORDER, T.T_LAST_POST DESC;
-- end main query for topics

SELECT FORUM_MEMBERS.MEMBER_ID FROM FORUM_MEMBERS WHERE M_NAME = 'graz'

SELECT FORUM_MEMBERS.M_LEVEL FROM FORUM_MEMBERS WHERE FORUM_MEMBERS.MEMBER_ID=100

SELECT mo.FORUM_ID
FROM FORUM_MODERATOR mo, FORUM_MEMBERS me
WHERE mo.FORUM_ID = 6 AND mo.MEMBER_ID = me.MEMBER_ID AND me.M_NAME = ''

SELECT mo.FORUM_ID
FROM FORUM_MODERATOR mo, FORUM_MEMBERS me
WHERE mo.FORUM_ID = 6 AND mo.MEMBER_ID = me.MEMBER_ID AND me.M_NAME = 'graz'

Select Count(*) as PostCount FROM FORUM_TOPICS T WHERE T.FORUM_ID = 6 AND T.T_STATUS > 1
Select Count(*) as PostCount FROM FORUM_REPLY R WHERE R.FORUM_ID = 6 AND R.R_STATUS > 1
SELECT FORUM_MEMBERS.MEMBER_ID FROM FORUM_MEMBERS WHERE M_NAME = 'graz'

SELECT Count(*) as SubCount from FORUM_SUBSCRIPTIONS S
WHERE S.MEMBER_ID = 100 AND ((S.CAT_ID = 0 and S.FORUM_ID = 0 and S.TOPIC_ID = 0)
OR (S.CAT_ID = 3 and S.FORUM_ID = 0 and S.TOPIC_ID = 0))

Select Count(*) as PostCount FROM FORUM_TOPICS T WHERE T.TOPIC_ID = 13951 AND T.T_STATUS > 1
Select Count(*) as PostCount FROM FORUM_REPLY R WHERE R.TOPIC_ID = 13951 AND R.R_STATUS > 1

SELECT Count(*) as SubCount from FORUM_SUBSCRIPTIONS S
WHERE S.MEMBER_ID = 100 AND ((S.CAT_ID = 0 and S.FORUM_ID = 0 and S.TOPIC_ID = 0)
OR (S.CAT_ID = 3 and S.FORUM_ID = 0 and S.TOPIC_ID = 0) OR (S.CAT_ID = 3 and S.FORUM_ID = 6 and S.TOPIC_ID = 0))

SELECT FORUM_MEMBERS.MEMBER_ID FROM FORUM_MEMBERS WHERE M_NAME = 'graz'
SELECT FORUM_MEMBERS.M_LEVEL FROM FORUM_MEMBERS WHERE FORUM_MEMBERS.MEMBER_ID=100
SELECT mo.FORUM_ID FROM FORUM_MODERATOR mo, FORUM_MEMBERS me
WHERE mo.FORUM_ID = 6 AND mo.MEMBER_ID = me.MEMBER_ID AND me.M_NAME = ''

SELECT mo.FORUM_ID
FROM FORUM_MODERATOR mo, FORUM_MEMBERS me
WHERE mo.FORUM_ID = 6 AND mo.MEMBER_ID = me.MEMBER_ID AND me.M_NAME = 'graz'

Select Count(*) as PostCount FROM FORUM_TOPICS T WHERE T.TOPIC_ID = 13934 AND T.T_STATUS > 1
Select Count(*) as PostCount FROM FORUM_REPLY R WHERE R.TOPIC_ID = 13934 AND R.R_STATUS > 1

SELECT Count(*) as SubCount
from FORUM_SUBSCRIPTIONS S
WHERE S.MEMBER_ID = 100
AND ((S.CAT_ID = 0 and S.FORUM_ID = 0 and S.TOPIC_ID = 0) OR (S.CAT_ID = 3 and S.FORUM_ID = 0 and S.TOPIC_ID = 0)
OR (S.CAT_ID = 3 and S.FORUM_ID = 6 and S.TOPIC_ID = 0))


SELECT CAT_ID, CAT_NAME, CAT_ORDER FROM FORUM_CATEGORY ORDER BY CAT_ORDER ASC, CAT_NAME ASC

SELECT FORUM_ID, F_TYPE, F_SUBJECT, F_URL, CAT_ID, F_ORDER
FROM FORUM_FORUM WHERE CAT_ID = 2 ORDER BY F_ORDER ASC, F_SUBJECT ASC;

SELECT FORUM_MEMBERS.MEMBER_ID FROM FORUM_MEMBERS WHERE M_NAME = 'graz'
SELECT FORUM_MEMBERS.M_LEVEL FROM FORUM_MEMBERS WHERE FORUM_MEMBERS.MEMBER_ID=100
SELECT FORUM_MEMBERS.MEMBER_ID FROM FORUM_MEMBERS WHERE M_NAME = 'graz'
SELECT FORUM_MEMBERS.M_LEVEL FROM FORUM_MEMBERS WHERE FORUM_MEMBERS.MEMBER_ID=100
SELECT FORUM_MEMBERS.MEMBER_ID FROM FORUM_MEMBERS WHERE M_NAME = 'graz'
SELECT FORUM_MEMBERS.M_LEVEL FROM FORUM_MEMBERS WHERE FORUM_MEMBERS.MEMBER_ID=100
SELECT FORUM_MEMBERS.MEMBER_ID FROM FORUM_MEMBERS WHERE M_NAME = 'graz'
SELECT FORUM_MEMBERS.M_LEVEL FROM FORUM_MEMBERS WHERE FORUM_MEMBERS.MEMBER_ID=100
SELECT FORUM_MEMBERS.MEMBER_ID FROM FORUM_MEMBERS WHERE M_NAME = 'graz'
SELECT FORUM_MEMBERS.M_LEVEL FROM FORUM_MEMBERS WHERE FORUM_MEMBERS.MEMBER_ID=100

SELECT FORUM_ID, F_TYPE, F_SUBJECT, F_URL, CAT_ID, F_ORDER
FROM FORUM_FORUM WHERE CAT_ID = 3 ORDER BY F_ORDER ASC, F_SUBJECT ASC;

SELECT FORUM_MEMBERS.MEMBER_ID FROM FORUM_MEMBERS WHERE M_NAME = 'graz'
SELECT FORUM_MEMBERS.M_LEVEL FROM FORUM_MEMBERS WHERE FORUM_MEMBERS.MEMBER_ID=100
SELECT FORUM_MEMBERS.MEMBER_ID FROM FORUM_MEMBERS WHERE M_NAME = 'graz'
SELECT FORUM_MEMBERS.M_LEVEL FROM FORUM_MEMBERS WHERE FORUM_MEMBERS.MEMBER_ID=100
SELECT FORUM_MEMBERS.MEMBER_ID FROM FORUM_MEMBERS WHERE M_NAME = 'graz'
SELECT FORUM_MEMBERS.M_LEVEL FROM FORUM_MEMBERS WHERE FORUM_MEMBERS.MEMBER_ID=100
SELECT FORUM_MEMBERS.MEMBER_ID FROM FORUM_MEMBERS WHERE M_NAME = 'graz'
SELECT FORUM_MEMBERS.M_LEVEL FROM FORUM_MEMBERS WHERE FORUM_MEMBERS.MEMBER_ID=100
SELECT FORUM_MEMBERS.MEMBER_ID FROM FORUM_MEMBERS WHERE M_NAME = 'graz'
SELECT FORUM_MEMBERS.M_LEVEL FROM FORUM_MEMBERS WHERE FORUM_MEMBERS.MEMBER_ID=100
SELECT FORUM_MEMBERS.MEMBER_ID FROM FORUM_MEMBERS WHERE M_NAME = 'graz'
SELECT FORUM_MEMBERS.M_LEVEL FROM FORUM_MEMBERS WHERE FORUM_MEMBERS.MEMBER_ID=100
SELECT FORUM_MEMBERS.MEMBER_ID FROM FORUM_MEMBERS WHERE M_NAME = 'graz'
SELECT FORUM_MEMBERS.M_LEVEL FROM FORUM_MEMBERS WHERE FORUM_MEMBERS.MEMBER_ID=100

SELECT FORUM_ID, F_TYPE, F_SUBJECT, F_URL, CAT_ID, F_ORDER
FROM FORUM_FORUM WHERE CAT_ID = 4 ORDER BY F_ORDER ASC, F_SUBJECT ASC;

SELECT FORUM_MEMBERS.MEMBER_ID FROM FORUM_MEMBERS WHERE M_NAME = 'graz'
SELECT FORUM_MEMBERS.M_LEVEL FROM FORUM_MEMBERS WHERE FORUM_MEMBERS.MEMBER_ID=100
SELECT FORUM_MEMBERS.MEMBER_ID FROM FORUM_MEMBERS WHERE M_NAME = 'graz'
SELECT FORUM_MEMBERS.M_LEVEL FROM FORUM_MEMBERS WHERE FORUM_MEMBERS.MEMBER_ID=100


In this case active.asp returned 2 topics. And it took 59 calls to the database to return 2 topics. I ran active.asp and returned 3 weeks worth of topics. It took 1,186 database calls to return that much data. If you look at the queries above you'll see some amazing repitition.

I also found a few interesting things. The main query that returns a list of the active topics takes less than 5% of the total server time to process these queries. That means that 95% of the database related time on active.asp is spent doing things other than returning the list of active topics.

It selects my MEMBER_ID 21 times. Then it selects my name 16 times. It appears to run a series of 3-4 queries PER TOPIC RETURNED. These appear to be used for moderation. If this page runs 3-4 queries per topic returned it's going to be hugely slow -- which it seems to be.

I'd hoped I could improve the performance of the page by adding an index. What I really think we need to do is do some work on active.asp. It appears that features are getting bolted on rather than integrated into the forums. For example, the SELECT that pulls the active topics doesn't select the field T_STATUS. Then for each topic we run a SELECT statement to check if T_STATUS is greater than 1. Can we just add T_STATUS to the SELECT statement and use that value?

I'd really like to help rewrite active.asp. Unfortunately after wading through the 13 pages it printed out I think I'm in over my head. Is there an ASP person that's familiar with active.asp that's willing to help? I'll gladly write SQL and test performance and help out where I can but knowledge of the actual code of the forums is limited.

I really, really like these forums. I'm just watching them put more and more of a load on my SQL Server as my forums grow. I'm hoping that we can make them scale up much better than they do currently.

<edit>Whoops. T_STATUS is SELECTed, just not used like I think it should be.</edit>

SQLTeam.com - For SQL Server Developers and Administrators
Snitz Info - SQL Server info on Snitz Forums

Edited by - grazman on 23 March 2002 17:46:49

Nathan
Help Moderator

USA
7664 Posts

Posted - 23 March 2002 :  18:46:39  Show Profile  Visit Nathan's Homepage
Umm, it seems those SELET COUNT(*) are for moderation, and are called inside the inc_moderation file, to find out how many unmoderated posts ect are in a moderated forum or moderated topic.

The total number of moderated posts/topics could be kept in a field in the FORUM_FORUM and FORUM_TOPIC tables, thereby eliminating all those calls. In theory.

  Nathan Bales - Romans 15:13
----------------------------------

Snitz Exchange | Do's and Dont's


Edited by - Nathan on 23 March 2002 18:48:41
Go to Top of Page

Nathan
Help Moderator

USA
7664 Posts

Posted - 23 March 2002 :  18:56:21  Show Profile  Visit Nathan's Homepage
It looks like subscriptions are checked individually using the CheckSubscriptions function. I think this could be done with a [edit]left outter[/edit] join in the main queue. . . right?

  Nathan Bales - Romans 15:13
----------------------------------

Snitz Exchange | Do's and Dont's


Edited by - Nathan on 23 March 2002 19:01:34
Go to Top of Page

ruirib
Snitz Forums Admin

Portugal
26364 Posts

Posted - 23 March 2002 :  19:42:16  Show Profile  Send ruirib a Yahoo! Message
Isn't this somehow improved in 3.4?

Anyway Grazman I think your findings are important indeed. Looks like huge improvements could be made on the performance of the most requested pages in a Snitz forum. I think it would probably be wise to wait for 3.4 and move on from there. Otherwise you may be doing work that will be lost as soon as next version comes out.
It would probably be important to get the opinion from someone from the Dev team on the prospects for improvement on this specific issue for version 3.4.


-------------------------------------------------
Installation Guide | Do's and Dont's | MODs
Go to Top of Page

Aaron S.
Average Member

USA
985 Posts

Posted - 23 March 2002 :  20:36:06  Show Profile  Visit Aaron S.'s Homepage
I agree... I see TONS of places for improvement (especially in places like getting MemberName and MemberID), but I'm waiting for 3.4 to see what has been done by the Dev team first.




Edited by - Aaron S. on 23 March 2002 20:36:45
Go to Top of Page

Gremlin
General Help Moderator

New Zealand
7528 Posts

Posted - 23 March 2002 :  20:46:55  Show Profile  Visit Gremlin's Homepage
Why is inc_subscriptions even required in active.asp ?

www.daoc-halo.com
Go to Top of Page

Nathan
Help Moderator

USA
7664 Posts

Posted - 23 March 2002 :  21:02:41  Show Profile  Visit Nathan's Homepage
Because every topic that activeusers displays it also displays the subscribe/unsubscribe icon.

Right now, every time it displays a topic it refers to a function in inc_subscriptions.asp that makes a call to the database to find out if that topic has been subscribed to or not.

So a highly active forum with topic subscriptions turned on is going to be killer on the database making an extra query or two for EVERY ACTIVE TOPIC!

If I knew how to do an SQL query with a whole bunch of inner joins and one left outter join I would fix that, but I have never studied SQL or the theory behind it.

  Nathan Bales - Romans 15:13
----------------------------------

Snitz Exchange | Do's and Dont's
Go to Top of Page

ruirib
Snitz Forums Admin

Portugal
26364 Posts

Posted - 23 March 2002 :  21:37:49  Show Profile  Send ruirib a Yahoo! Message
quote:

If I knew how to do an SQL query with a whole bunch of inner joins and one left outter join I would fix that, but I have never studied SQL or the theory behind it.

  Nathan Bales - Romans 15:13
----------------------------------

Snitz Exchange | Do's and Dont's



Surely someone on the dev team knows. I can help with that if you want.
There will be a problem with MySQL though. Last time I looked it didn't even support inner joins, much less outer joins. If the situation remains you'll need different code to handle MySQL (I hope that support for MySQL wasn't the reason for these inefficiencies in the SQL used here - I guess that could only add to my ever growing contempt for MySQL ).

-------------------------------------------------
Installation Guide | Do's and Dont's | MODs
Go to Top of Page

Gremlin
General Help Moderator

New Zealand
7528 Posts

Posted - 23 March 2002 :  21:40:59  Show Profile  Visit Gremlin's Homepage
Actually the problems not so much there as it is with these areas here

1) chkForumAccess is one of the biggest killers as far as queries go it would appear to be calling that for every topic.

2) getNewMemberNumber, and getMemberNumber and getMemberId in inc_functions could all have the following code placed right at the top


if MemberID <> 0 then
getNewMemberNumber = MemberID
exit function
end if


The Variable MemberId is already being set in inc_top.asp to equal the current user.

Removing the ability to subscribe to a topic from active.asp wouldn't be a bad idea either .. I mean whos going to subscribe to a topic before they've read it anyway ?

www.daoc-halo.com

Edited by - Gremlin on 23 March 2002 21:42:58
Go to Top of Page

Nathan
Help Moderator

USA
7664 Posts

Posted - 23 March 2002 :  22:28:42  Show Profile  Visit Nathan's Homepage
For people who only use active.asp like me, its the only place we are going to see a button to subscribe at all. Except in the topic iteself.

It would be foolish to remove that option unless you want to remove it form forum.asp as well.

  Nathan Bales - Romans 15:13
----------------------------------

Snitz Exchange | Do's and Dont's
Go to Top of Page

Nathan
Help Moderator

USA
7664 Posts

Posted - 23 March 2002 :  22:30:44  Show Profile  Visit Nathan's Homepage
mySql supports those joins. If it didn't the forum would not function.

  Nathan Bales - Romans 15:13
----------------------------------

Snitz Exchange | Do's and Dont's
Go to Top of Page

Aaron S.
Average Member

USA
985 Posts

Posted - 23 March 2002 :  22:39:31  Show Profile  Visit Aaron S.'s Homepage
You can build a query in MS Access and then view the SQL code for it.

That is the easiest way I know of to build complex queries.



Go to Top of Page

Gremlin
General Help Moderator

New Zealand
7528 Posts

Posted - 23 March 2002 :  22:57:26  Show Profile  Visit Gremlin's Homepage
quote:

For people who only use active.asp like me, its the only place we are going to see a button to subscribe at all. Except in the topic iteself.

It would be foolish to remove that option unless you want to remove it form forum.asp as well.

  Nathan Bales - Romans 15:13
----------------------------------

Snitz Exchange | Do's and Dont's




Nathan how often do you subscirbe to a topic from active.asp ? at that point you don't even know what the topics about becuase you haven't even read it !

To cut down the Database calls further I'm currently tring this out. I've modified isAllowedMember to this (still testing it hence the reason its called isAllowedMember2)


function isAllowedMember2(fMemberID)
isAllowedMember2 = ""
on error resume next
strSql = "SELECT FORUM_ID FROM " & strTablePrefix & "ALLOWED_MEMBERS "
strSql = strSql & " WHERE " & strTablePrefix & "ALLOWED_MEMBERS.MEMBER_ID = " & ChkString(fMemberID, "SQLString")

Set rsAllowedMember = Server.CreateObject("ADODB.Recordset")
rsAllowedMember.open strSql, my_Conn
if not rsAllowedMember.EOF then
AllowedForums = rsAllowedMember.GetRows()
rsAllowedMember.Close()
set rsAllowedMember = nothing
For AllowCount = 0 to ubound(AllowedForums,2) ' Total Numer of Rows
isAllowedMember2 = isAllowedMember2 & "|" & AllowedForums(0,AllowCount)
next
isAllowedMember2 = isAllowedMember2 & "|" ' Add last pipe
end if

end function


added the following into inc_top.asp to builded a pipe delimited sting of all forums the user has access too e.g |23|34|35|45|

AllowForumList = isAllowedMember2(MemberID)


then changed all instances of where isAllowedMembers is called to something like this

if instr(AllowForumList,("|" & fForum_ID & "|",) > 0 then
MatchFound = 1
else
MatchFound = 0
end if

Seems to be ok now, have got the active topics down from 25 seconds too show me the Month of posts weeks of posts too about 4 seconds :). And I've still got one more thing to look at.

Have also converted active.asp to GetRows() though that didn't actually have quite the impact I had hoped for.


www.daoc-halo.com



Edited by - Gremlin on 24 March 2002 00:19:30
Go to Top of Page

Nathan
Help Moderator

USA
7664 Posts

Posted - 23 March 2002 :  23:04:58  Show Profile  Visit Nathan's Homepage
I have never subscribed to a topic from anywhere BUT active.asp

It is best to keep topic options the same for all locations, active.asp, topic.asp, and forum.asp That way they are maintainable and useable.

  Nathan Bales - Romans 15:13
----------------------------------

Snitz Exchange | Do's and Dont's
Go to Top of Page

Nathan
Help Moderator

USA
7664 Posts

Posted - 23 March 2002 :  23:07:14  Show Profile  Visit Nathan's Homepage
Your above function looks good, but try to use the Snitz variable naming prefixes

str for string
int for interger
bol for boolian
arr for array


  Nathan Bales - Romans 15:13
----------------------------------

Snitz Exchange | Do's and Dont's
Go to Top of Page

Aaron S.
Average Member

USA
985 Posts

Posted - 23 March 2002 :  23:07:40  Show Profile  Visit Aaron S.'s Homepage
To add SUBS to the query, it would look something like this (this is not the exact query as I am still working thru the logic on the page).

SELECT FORUM_FORUM.F_SUBJECT, FORUM_FORUM.F_SUBSCRIPTION, FORUM_FORUM.F_STATUS, FORUM_FORUM.F_ORDER, FORUM_CATEGORY.CAT_STATUS, FORUM_CATEGORY.CAT_SUBSCRIPTION, FORUM_CATEGORY.CAT_ORDER, FORUM_TOPICS.T_SUBJECT, FORUM_TOPICS.T_VIEW_COUNT, FORUM_TOPICS.FORUM_ID, FORUM_TOPICS.T_STATUS, FORUM_TOPICS.TOPIC_ID, FORUM_TOPICS.T_ISPOLL, FORUM_TOPICS.CAT_ID, FORUM_TOPICS.T_REPLIES, FORUM_TOPICS.T_AUTHOR, FORUM_MEMBERS.M_NAME, FORUM_TOPICS.T_LAST_POST, FORUM_TOPICS.T_LAST_POST_AUTHOR, FORUM_SUBSCRIPTIONS.MEMBER_ID
FROM (FORUM_CATEGORY INNER JOIN (FORUM_FORUM INNER JOIN (FORUM_MEMBERS INNER JOIN FORUM_TOPICS ON FORUM_MEMBERS.MEMBER_ID = FORUM_TOPICS.T_AUTHOR) ON (FORUM_FORUM.FORUM_ID = FORUM_TOPICS.FORUM_ID) AND (FORUM_FORUM.CAT_ID = FORUM_TOPICS.CAT_ID)) ON (FORUM_TOPICS.CAT_ID = FORUM_CATEGORY.CAT_ID) AND (FORUM_CATEGORY.CAT_ID = FORUM_FORUM.CAT_ID)) LEFT JOIN FORUM_SUBSCRIPTIONS ON FORUM_MEMBERS.MEMBER_ID = FORUM_SUBSCRIPTIONS.MEMBER_ID ORDER BY FORUM_CATEGORY.CAT_ORDER, FORUM_FORUM.F_ORDER, FORUM_TOPICS.T_LAST_POST DESC;

This is a fugly query as joins slow things down... but it would definitely be faster than querying the Db on every active topic to see if the member has a subscription.





Go to Top of Page
Page: of 6 Previous Topic Topic Next Topic  
Next Page
 New Topic  Topic Locked
 Printer Friendly
Jump To:
Snitz Forums 2000 © 2000-2021 Snitz™ Communications Go To Top Of Page
This page was generated in 0.19 seconds. Powered By: Snitz Forums 2000 Version 3.4.07